SQL查询显示最近的日期?

时间:2011-05-31 11:37:07

标签: mysql sql datetime

我正在试图弄清楚如何编写一个MySQL查询,它将返回最接近的3个日期事件。

这是我的表:

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,因为它们与当前日期相比最接近...

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

5 个答案:

答案 0 :(得分:63)

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 :(得分:3)

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

答案 2 :(得分:1)

接受的答案中的查询实际上只是对先前选择的值进行排序,而不是在选择之前对其进行过滤。但是此查询对我有用:

SELECT event_id, event_date
FROM events 
WHERE ABS(TIMESTAMPDIFF(DAY, event_date, $some_date)) < 10
ORDER BY event_date

说明:数字10是一天的范围(前后)。如果没有ABS(),则只能选择以前或将来的事件,但是我需要最接近的事件。

答案 3 :(得分:0)

SELECT event_id FROM Table ORDER BY EVENT_START_DATE LIMIT 3

答案 4 :(得分:0)

我想这就是你要找的东西。它类似于每个人的回应。

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