Margin-Auto: Nach gruppiertem Feld filtern

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

  1. 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

    --
    -------------------
    Inter Arma Enim Silent Leges  --  Cicero
    1. Hi,

      SELECT personen_id, MIN(zeit) AS starttime
      FROM tblpersonen
      GROUP BY personen_id
      HAVING starttime < CURRENT_TIME

      Danke, das funktioniert.

      Margin-Auto