Mysql 显示最近日期的SQL查询?

Mysql 显示最近日期的SQL查询?,mysql,sql,datetime,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 te

我试图找出如何编写一个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,因为它们与当前日期相比最接近

编辑:查询应仅查找未来事件

SELECT event_id FROM Table ORDER BY EVENT_START_DATE LIMIT 3
ABS()
表示1天前的事件与未来1天的事件一样接近。如果你只想要还没有发生的事情,那就去做吧

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

我想这就是你要找的。这和其他人的反应一样

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

来自accepted answer的查询实际上只是对以前选择的值进行排序,而不是在选择之前对其进行过滤。但这个查询对我来说很有用:

SELECT event_id, event_date
FROM events 
WHERE ABS(TIMESTAMPDIFF(DAY, event_date, $some_date)) < 10
ORDER BY event_date
选择事件id、事件日期
从事件中
其中ABS(TIMESTAMPDIFF(天,事件日期,$some日期))小于10
按事件和日期排序

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

这也将返回事件id 6,它发生在过去。如果是这样的话会更好:从表event\u START\u DATE>中选择event\u id=按事件的当前时间戳顺序\u START\u DATE LIMIT 3这些日期在2010年,所以实际上是4,3号和2号是最接近现在的:)我想你的意思是这些日期是2011年。@Mat-wow,完全错过了。抱歉,已修复为2011此查询实际上只是对所选值进行排序,而不是在选择之前对其进行筛选。
SELECT EVENT_ID FROM TABLE WHERE EVENT_START_DATE > NOW() ORDER BY ABS(DATEDIFF(EVENT_START_DATE, NOW())) ASC LIMIT 3
SELECT event_id, event_date
FROM events 
WHERE ABS(TIMESTAMPDIFF(DAY, event_date, $some_date)) < 10
ORDER BY event_date