2009-07-02 7 views
0

Meine Tabelle sieht so etwas wie:durch Spalte mit MySQL gruppiert einzigartige Reihe auswählen

ID | Typ
01 | a
02 | c
03 | b
04 | a
05 | b
06 | ein

ich ausgeben möchte, dass die ID der zuletzt hinzugefügten Einträge von Typ gruppiert. ID ist ein Auto-Inkrement-Feld, so dass der zuletzt hinzugefügte Eintrag offensichtlich die höchste Nummer ist.

SELECT * FROM `table` GROUP BY `Type` ORDER BY `ID` DESC, `Type` ASC 

dieser Gruppe die Reihen von Typ dann Sorten von ID so erhalte ich IDs 1,2,3 während ich zuerst DANN Gruppe sortieren möchten das Ergebnis erhalten: 6,5,2

+0

Welche Version von MySQL verwenden Sie? Das ist wichtig zu wissen, ob Subselects eine Option wäre –

+0

MySQL-Version: 5.0.81-Community –

Antwort

1

Dies könnte das sein, was Sie suchen ...

 
SELECT MAX(`ID`), `Type` 
FROM  `table` 
GROUP BY `Type` 
ORDER BY `Type` ASC 

den Maximalwert von ID als wählen für jede Gruppe von Typ lesen.

+0

Funktioniert perfekt. Obwohl die anderen Lösungen sind, ist dies die einfachste, nach der ich gesucht habe. –

+0

auch bemerkt, müssen Sie auch MAX ('Type') haben, sonst wählt es nicht die richtige, vor allem, wenn Sie ein paar andere Spalten haben –

1

Wenn Ihre MySQL-Version Subselects (und 5.x der Fall ist), sollte diese Arbeit:

SELECT * 
    FROM (SELECT * FROM `table` ORDER BY `id` DESC) AS tmp 
    GROUP BY `type` 
    ORDER BY `type` ASC; 
0

Hier ist eine klassische Art und Weise w/o Subselects:

SELECT t1.* FROM table t1 
LEFT JOIN table t2 
    ON (t2.type = t1.type AND t2.id > t1.id) 
WHERE t2.id IS NULL 

lesen Sie als "wählen Sie Zeilen in der Tabelle, so dass keine andere Zeile mit dem gleichen Typ eine größere ID hat".

Verwandte Themen