2010-11-18 82 views
0

因此,查询我试图让貌似现在这种权利:在过去的MySQL选择日期:问题与MAX和GROUP BY

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

dates基本上保持与相关的DATETIME值start一份工作。
正如您可能猜到的那样,jid是存储在另一个表中的作业的ID。
作业可以有许多dates

我试图做到的是找出哪些工作在过去所有的start日期。

我的想法是选择start日期的最高值,按jid分组,如果它们在过去,这意味着与同一工作相关的所有其他日期也是过去的日期。

此查询不起作用,因为它正在检查过去的start日期,然后选择其中的最高日期。这并不排除将来可能会有同一份工作的日期。

我不知道我现在该怎么办。任何帮助或线索表示赞赏。

干杯汤姆 -

回答

2

你必须使用具有:

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

HAVING行为有点像在哪里。它在之后筛选出行。通常(实际上,我想不出任何其他情况),你只能使用HAVING和聚合函数。

(我希望你在以后真的插入日期在你的桌子,虽然!)

+0

感谢,还有一个问题,为什么你说你希望我在将来的日期在我的表? – TomWilde 2010-11-19 00:12:38

+0

否则,这将不会返回任何内容(如果您有过去的日期) – 2010-11-19 03:43:38