Wählen höchste Datum, wenn nicht Null

stimmen
1

Ich habe die folgende Tabelle:


Mails

  • id (int Autoinkrement 11)
  • User_id (int 11)
  • Gegenstand (VARCHAR 255)
  • Hauptteil)
  • Gelöscht (Datumzeit)

Standardmäßig wird die deletedhält Spalte den Wert 0000-00-00 00:00:00Wenn etwas die gelöscht wird deletedSpalte dem Löschdatum festgelegt wird. z.B:2017-08-14 09:37:13

Jetzt möchte ich diese Tabelle abfragen und erhalten entweder den user_idDatensatz wo deleted= 0000-00-00 00:00:00oder den letzten deletedWert , wenn es keine Benutzerdatensatz ist , wo deleted=0000-00-00 00:00:00

Veröffentlicht am 14/08/2017 um 06:40
vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
1

Sie können mit einem Fall einen bestimmten Wert über sortieren:

select  user_id
from    YourTable
order by
        case
        when deleted = '0000-00-00 00:00:00' then '9999-12-31 23:59:59'
        else deleted
        end desc
limit   1

Wo '9999-12-31 23:59:59'ist der Maximalwert eines Datums .

Für mehrere Benutzer können Sie das Maximum mit einem Join nachschlagen:

select  *
from    Mails m1
join    (
        select  user_id
        ,       max(
                case
                when deleted = '0000-00-00 00:00:00' then '9999-12-31 23:59:59'
                else deleted
                end) max_deleted
        from    Mails
        group by
                user_ud
        ) m2
on      m1.user_id = m2.user_id
        and case
            when m1.deleted = '0000-00-00 00:00:00' then '9999-12-31 23:59:59'
            else m1.deleted
            end = m2.max_deleted
Beantwortet am 14/08/2017 um 07:29
quelle vom benutzer

stimmen
0

eine leichte Änderung Andomar Antwort macht die Grenze entfernen Sie so etwas wie versuchen könnten:

SELECT  user_id
FROM    YourTable
WHERE
        case
        when deleted = '0000-00-00 00:00:00' then 'true'
        else deleted then 'true'
        end desc = 'true'

Als Case-Anweisungen nacheinander laufen würde dies versuchen und für die Filter in der WHERE-Klausel true zurück, wenn das gelöschte Datum ‚0000-00-00 00.00.00‘ ist und wenn diese falsch hält wird er zum nächsten Fall bewegen, die immer halten versuchen und übergibt die Filter.

wenn auch nicht die schönste.

Beantwortet am 14/08/2017 um 08:11
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more