2010-11-18 3 views
0

Итак, запрос я пытаюсь сделать вид, как это прямо сейчас:MySQL Выберите даты в прошлом: Проблема с MAX и GROUP BY

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

dates В таблице в основном содержит значение start DATETIME, связанное с работа.
Как вы, наверное, догадались, jid - это идентификатор задания, хранящегося в другой таблице.
Задание может иметь много dates

То, что я пытаюсь выполнить, чтобы выяснить, какие рабочие места имеют все свои start даты в прошлом.

Моя мысль заключалась в том, чтобы выбрать самые высокие значения дат start, сгруппированных по jid, и если бы они были в прошлом, это означало бы, что все другие даты, связанные с одной и той же работой, также в прошлом.

Этот запрос не работает, потому что он проверяет даты в start в прошлом и затем выбирает самые высокие из них. Это не исключает возможности другой даты для той же работы, лежащей в будущем.

Я понятия не имею, как я мог идти дальше. Любая помощь или подсказка оцениваются.

Приветствия - Том

ответ

2

Вы должны использовать HAVING:

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

HAVING действует немного как WHERE. Он отфильтровывает строки после они были выбраны. Обычно (и на самом деле, я не могу думать ни о каком другом случае), вы используете только HAVING с агрегатными функциями.

(я надеюсь, что вы действительно вставленные даты в будущем в таблице, хотя!)

+0

спасибо, еще один вопрос, почему вы говорите, надеюсь, у меня есть даты в будущем в моей таблице? – TomWilde

+0

В противном случае это ничего не вернет (если у вас есть даты в прошлом) –

Смежные вопросы