2010-11-18 2 views
0

also die Abfrage Ich versuche, sieht aus wie dieses Recht jetzt zu machen:MySQL Datum wählen in der Vergangenheit: Problem mit MAX und GROUP BY

SELECT `jid`, MAX(`start`) as `start` FROM `dates` WHERE `start` < NOW() GROUP BY `jid` 

Die Tabelle dates im Grunde hält einen DATETIME- Wert start zugeordnet ein Beruf.
Wie Sie wahrscheinlich erraten haben, ist jid die ID eines Jobs, der in einer anderen Tabelle gespeichert ist.
kann ein Job dates

Was viele haben Ich versuche, was Jobs alle start Termine in der Vergangenheit ihre haben, um herauszufinden, zu tun ist.

Mein Gedanke war, die höchsten Werte der start Daten auszuwählen, gruppiert von jid und wenn sie in der Vergangenheit waren, würde es bedeuten, dass alle anderen Daten, die mit dem gleichen Job verbunden sind, auch in der Vergangenheit sind.

Diese Abfrage funktioniert nicht, da sie nach start Daten in der Vergangenheit sucht und dann die höchste davon auswählt. Dies schließt nicht die Möglichkeit aus, dass in der Zukunft ein anderes Datum für denselben Arbeitsplatz besteht.

Ich habe keine Ahnung, wie ich jetzt fortfahren könnte. Jede Hilfe oder Anhaltspunkt wird geschätzt.

Beifall - Tom

Antwort

2

Sie haben HAVING zu verwenden:

SELECT jid, MAX(start) as start 
FROM dates 
GROUP BY jid 
HAVING MAX(start) < NOW(); 

mit einem Bit wirkt wie WHERE. Es filtert die Zeilen nach sie wurden ausgewählt. Normalerweise (und eigentlich kann ich an keinen anderen Fall denken), verwenden Sie nur HAVING mit Aggregatfunktionen.

(Ich hoffe, Sie wirklich eingefügt zukünftigen Termine in der Tabelle, aber!)

+0

Dank, eine Frage, warum sagen Sie, Sie hoffe, ich habe zukünftigen Termine in meinem Tisch? – TomWilde

+0

Ansonsten würde dies nichts zurückgeben (wenn Sie Daten in der Vergangenheit haben) –