我正试图弄清楚如何编写一个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 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
SELECT *
FROM table
WHERE EVENT_START_DATE >= NOW()
ORDER BY EVENT_START_DATE
LIMIT 3
来自已接受答案的查询实际上只是对先前选择的值进行排序,而不是在选择之前对其进行筛选。但这个查询对我有效:
SELECT event_id, event_date
FROM events
WHERE ABS(TIMESTAMPDIFF(DAY, event_date, $some_date)) < 10
ORDER BY event_date
说明:数字10是一个日期范围(包括前后)。没有ABS()
,您只能选择以前或将来的事件,但我需要最接近的。
我想这就是您想要的。这和其他人的反应也很相似。
SELECT EVENT_ID FROM TABLE WHERE EVENT_START_DATE > NOW() ORDER BY ABS(DATEDIFF(EVENT_START_DATE, NOW())) ASC LIMIT 3
SELECT event_id FROM Table ORDER BY EVENT_START_DATE LIMIT 3