Nach gruppiertem Feld filtern
Margin-Auto
- datenbank
0 Rouven
Hi,
ich habe (in mySQL 5.0) eine Tabelle mit Angaben zu (bspw.) Personen. Zu jeder Person existieren mehrere Datensätze, von denen jeder mit einer Uhrzeit versehen ist. Ich möchte jetzt alle Personen auswählen, deren "frühester" Datensatz vor der aktuellen Uhrzeit liegt.
Mein Ansatz:
SELECT personen_id, zeit, min(zeit) AS starttime FROM tblpersonen WHERE starttime < CURRENT_TIME GROUP BY personen_id
Damit bekomme ich die Fehlermeldung, dass er starttime im WHERE-Abschnitt nicht kennt. Verwende ich stattdessen
WHERE min(zeit)<CURRENT_TIME
bekomme ich die Fehlermeldung "Invalid use of group function"
Wie kann ich das realisieren?
Ich kann natürlich das GROUP BY weg lassen und anschließend manuell nachbauen, das fände ich aber unelegant.
TIA
Margin-Auto
Hi,
auf die Ergebnisse der Gruppierung greift man mit HAVING zu.
Ich würde jetzt gerne deine Abfrage korrigieren, aber da ist noch ein Problem drin. Du kannst _eigentlich_ nicht "zeit" Abfragen, wenn du nicht auch danach gruppierst, auch wenn MySQL dir das durchgehen lässt. Ich gestatte mir daher mal, die Spalte wegzulassen.
SELECT personen_id, MIN(zeit) AS starttime
FROM tblpersonen
GROUP BY personen_id
HAVING starttime < CURRENT_TIME
MfG
Rouven
Hi,
SELECT personen_id, MIN(zeit) AS starttime
FROM tblpersonen
GROUP BY personen_id
HAVING starttime < CURRENT_TIME
Danke, das funktioniert.
Margin-Auto