2011-01-14 12 views
5

Tabelle: UUID, Version, DatumzeitMySQL - Gruppe von mit Sortieren nach DESC

Version ist nicht einzigartig, aber die Idee ist nur die Zeilen mit den neuesten Datumzeit für eine bestimmte UUID

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

zu holen

... natürlich erhalten datetime asc results - gibt es eine Möglichkeit, die Gruppe "vorbestellen", so dass nur die neueste Version abgerufen wird?

Antwort

21

da nur die Tabelle diejenigen 3-Feld und Sie sind Filterung durch uid können Sie einfach die MAX verwenden, ohne die JOIN:

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

Wenn jedoch die Tabelle mehr Felder hatte, oder Sie sind nicht Filterung von uid - Sie müssen zuerst den MAX Datetime für jede Version zu erhalten, wählen Sie die Zeile:

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 
+0

Genau was ich brauchte mit ein paar kleinen Änderungen - Danke! – mmrtnt

+0

Muss die WHERE-Klausel zweimal wiederholt werden? – ina

+0

@ina, ja aus Leistungsgründen. –

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

Es gibt einen besseren Weg für mich, Siehinzufügen könnten 210 zu einer Gruppe von:

SELECT * FROM Tabelle WHERE 'bla' GROUP uuid = BY-Version ab

, warum es funktioniert, ist, weil meine ids erzeugt werden und so immer die neuesten id bedeuten die neueste Datetime

+1

warum niemand das sieht ... es ist Arbeit und einfache Abfrage: D – haidarvm

+0

Schön, aber funktioniert nur, wenn 'datetime' in Reihenfolge eingefügt wurde (sortiert) –