• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Abfrage mit GROUP BY und ORDER BY

Mark

Neues Mitglied
Ich habe eine Tabelle mit diversen Spalten, aus der ich eine Abfrage machen will.
Die Spalten auf die es ankommt sind

ID | Name | Code | Timestamp

Die ID ist einmalig, alle anderen Felder können doppelte Einträge enthalten, auch bunt gemischt, also z.B. gleicher Code mit verschiedenem Name, oder gleicher Name mit verschiedenem Code.
Auch der Timestamp kann doppelt vorkommen, nur die Kombination von Code und Timestamp ist jeweils einmalig.

Ich möchte nun alle Spalten aus allen Datensätze mit verschiedenem Code lesen.
Wenn ein Code mehrfach vorkommt, soll er nur den Datensatz mit dem grössten Timestamp lesen.
Das Ergebnis soll nach Name sortiert werden.

Ich brauche also etwa sowas:

Code:
SELECT * FROM `tabelle` GROUP BY `Code` ORDER BY `Name`;

Aber wie stelle ich es an, dass er innerhalb vom GROUP BY jeweils den Datensatz mit dem grössten Timestamp nimmt?
 
Danke für schnelle Antwort.
Google hat mir ein paar Beispiele gefunden, aber die passen alle irgendwie nicht.
Am besten beschrieben ist das Problem bei

select - MYSQL shows incorrect rows when using GROUP BY - Stack Overflow

aber da geht es ums joinen von 2 Tabellen und was der da abfragt mit JOIN und LEFT OUTER JOIN ist für meine bescheidenen Kenntnisse zu hoch.
Ich habe nur soviel verstanden, dass ohne diesen Umstand im Ergebnis eine Mischung von Daten aus mehreren Datensätzen derselben Gruppe rauskommen können.
 
MAX() alleine reicht für das was Du willst tatsächlich nicht. Hierfür muss das Statement etwas komplexer sein, so wie auf der Seite die Du gefunden hast. Das Statement dort musst Du nur eben auf eine Tabelle umbauen, statt auf 2.

Tipp: Eine Tabelle kann man auch mehrfach in ein Statement einbinden.

Code:
SELECT t1.*, MAX(t2.timestamp)
FROM tabelle t1, tabelle t2
WHERE t1.name = t2.name
GROUP BY t1.name
 
Zurück
Oben