2010-11-18 44 views
0

Ainsi, la requête que je suis en train de faire ressemble à ce moment:MySQL Sélectionner des dates dans le passé: un problème MAX et GROUP BY

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

Le tableau dates tient essentiellement une valeur DATETIME start associée à un travail.
Comme vous l'avez probablement deviné, jid est l'ID d'un travail, stocké dans une autre table.
Un travail peut avoir de nombreux dates

Ce que je suis en train d'accomplir est de savoir quels emplois ont toutes leurs start dates dans le passé. Mon idée était de sélectionner les valeurs les plus élevées des dates start, regroupées par jid et si elles étaient dans le passé, cela impliquerait que toutes les autres dates associées au même travail sont également dans le passé.

Cette requête ne fonctionne pas car elle vérifie les dates start dans le passé, puis en sélectionnant la plus élevée de celles-ci. Cela n'exclut pas la possibilité d'une autre date pour le même travail, à l'avenir.

Je n'ai aucune idée de comment procéder maintenant. Toute aide ou indice est apprécié.

Cheers - Tom

Répondre

2

Vous devez utiliser HAVING:

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

AYANT agit un peu comme WHERE. Il filtre les lignes après ils ont été sélectionnés. Habituellement (et en fait, je ne peux pas penser à un autre cas), vous utilisez seulement HAVING avec des fonctions d'agrégat.

(J'espère que les dates vraiment insérées dans l'avenir dans votre table, si!)

+0

grâce, une question, pourquoi dites-vous que vous espère avoir des dates dans l'avenir dans ma table? – TomWilde

+0

Sinon, cela ne retournerait rien (si vous avez des dates dans le passé) –