zusammen - mysql order before group



MySQL-Gruppieren mit nach Auftrag von DESC (2)

Tabelle: Uuid, Version, Datetime

Version ist nicht einzigartig, aber die Idee ist, nur die Zeilen mit dem spätesten Datum für eine bestimmte UUID zu holen

SELECT * FROM table WHERE uuid='bla' GROUP BY version ORDER BY datetime desc

... erhält natürlich datetime asc results - gibt es eine Möglichkeit, die Gruppe durch "desc" vorzubestellen, so dass nur die neueste Version abgerufen wird?


Answer #1

Da die Tabelle nur diese drei Felder enthält und Sie nach uid filtern, können Sie einfach MAX ohne JOIN verwenden:

SELECT version, MAX(datetime) Maxdatetime
FROM table
WHERE uuid='bla'
GROUP BY version

Wenn die Tabelle jedoch mehr Felder enthält oder Sie nicht nach uid filtern, uid Sie zuerst die MAX-Datetime für jede Version ermitteln und dann die Zeile auswählen:

SELECT t.uuid, t.version, t.datetime 
FROM table t JOIN (
    SELECT version, MAX(datetime) Maxdatetime
    FROM table
    WHERE uuid='bla'
    GROUP BY version
) r ON t.version = r.version AND t.datetime = r.Maxdatetime
WHERE t.uuid='bla'
ORDER BY t.datetime desc

Answer #2
SELECT * FROM 
(SELECT * FROM table WHERE uuid='bla' ORDER BY datetime desc) table 
GROUP BY version;




group-by