2011-05-31 125 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