2011-05-31 147 views
29

我想弄清楚如何编写一个MySQL查询,将返回最接近的3个事件的日期。SQL查询显示最近日期?

这是我的表:

EVENT_ID EVENT_NAME  EVENT_START_DATE(DATETIME) 
1   test   2011-06-01 23:00:00 
2   test2   2011-06-03 23:00:00 
3   test3   2011-07-01 23:00:00 
4   test4   2011-08-09 23:00:00 
5   test5   2011-06-02 23:00:00 
6   test6   2011-04-20 23:00:00 

所以查询结果应该是对ID的1,2,5,因为他们在比较当前日期发生最接近..

编辑:查询应该只查找未来事件。

+1

这些日期是在2010年,所以实际上4,3和2是最接近现在:)我认为你的意思是这些日期是2011年 – Mat 2011-05-31 11:48:23

+0

@Mat哇,完全错过了。对不起,修正为2011 – 2011-05-31 11:50:56

回答

52
SELECT event_id 
FROM Table 
ORDER BY ABS(DATEDIFF(EVENT_START_DATE, NOW())) 
LIMIT 3 

ABS()意味着事件1天前仅仅是尽可能接近事件1天的未来。如果你只想要还没有发生的事件,做

SELECT event_id 
FROM Table 
WHERE EVENT_START_DATE > NOW() 
ORDER BY EVENT_START_DATE 
LIMIT 3 
+1

DATEDIFF()与unix时间戳一起工作吗? – 2016-04-01 11:20:42

0
SELECT event_id FROM Table ORDER BY EVENT_START_DATE LIMIT 3 
+0

这也会返回发生在过去的event_id 6。 – 2011-05-31 11:42:33

+1

它会更好,如果是这样的话:SELECT event_id FROM Table EVENT_START_DATE> = CURRENT_TIMESTAMP ORDER BY EVENT_START_DATE LIMIT 3 – 2014-05-18 23:49:10

2
SELECT * 
    FROM table 
    WHERE EVENT_START_DATE >= NOW() 
ORDER BY EVENT_START_DATE 
    LIMIT 3 
0

我想这就是你要找的。这与所有人都很相似。

SELECT EVENT_ID FROM TABLE WHERE EVENT_START_DATE > NOW() ORDER BY ABS(DATEDIFF(EVENT_START_DATE, NOW())) ASC LIMIT 3