Ich habe grad ein Brett vor'm Kopf... Wie kann ich möglichst elegent folgendes Problem formulieren (vereinfacht): Tabelle: ID NameID Datum ===================================== 1 1 2009-09-16 00:00:01 2 1 2009-09-16 00:00:02 3 1 2009-09-16 00:00:03 4 2 2009-09-16 00:00:04 5 2 2009-09-16 00:00:05 6 1 2009-09-17 00:00:01 7 1 2009-09-17 00:00:02 8 1 2009-09-18 00:00:01 9 1 2009-09-18 00:00:02 10 2 2009-09-18 00:00:03 11 3 2009-09-18 00:00:04 12 3 2009-09-18 00:00:05 Als Ergebnis meiner Abfrage möchte ich folgendes bekommen: ID NameID Datum =============================================== 9 1 2009-09-18 00:00:01 10 2 2009-09-18 00:00:03 12 3 2009-09-18 00:00:05 Mein Versuch (vereinfacht) war folgender: SELECT `ID`, `NameID`, `Datum` FROM `Tabelle` WHERE `Datum` LIKE '2009-09-18 %' AND ORDER BY `Datum` DESC GROUP BY `NameID` Das ganze funktioniert aber leider nicht, da man erst nach dem Gruppieren sortieren kann. Drehe ich das um, so erhalte ich nicht den "spätesten" Eintrag am Tag pro Person, sondern den Ersten. Sollte man das ganze mit einem verschachtelten SELECT lösen oder gibt es eine einfachere Variante?
Probier's mal so: SELECT max(`ID`), `NameID`, max(`Datum`) FROM `Tabelle` WHERE `Datum` LIKE '2009-09-18 %' GROUP BY `NameID` order by 3 wobei dabei max(id) aber nicht zwingend zu max(datum) passt.
Danke, funktioniert leider nicht, da die Tabelle in Wirklichkeit noch mehr Spalten hat, dessen Zuordnung dann verloren gehen. Außerdem liefert mir dann die Ausgabe nur eine Zeile.
Gast
#1418070
sowas ähnliches hab ich heut in Oracle gemacht, falls MySQL auch sowas wie dir Analytical Functions wie Oracle hat, versuch mal sowas: http://sql-plsql-de.blogspot.com/2008/05/den-jngsten-datensatz-selektieren-mit.html
Gast
#1418079
in den Kommentaren ist dort auch eine nicht so oracle-spezifische Lösung zu finden
Danke, ich habe es jetzt so gelöst: SELECT * FROM (SELECT ID, NameID, Datum FROM Tabelle WHERE Datum LIKE '2009-09-16%' ORDER BY Datum DESC) as virtual_table GROUP BY NameID
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.