SQL-запрос, чтобы показать ближайшую дату? - PullRequest
32 голосов
/ 31 мая 2011

Я пытаюсь выяснить, как написать запрос 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

Итак,результат запроса должен быть для идентификаторов 1,2,5, так как они наиболее близки к текущей дате.

РЕДАКТИРОВАТЬ: запрос должен найти только будущие события.

Ответы [ 5 ]

64 голосов
/ 31 мая 2011
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 
3 голосов
/ 31 мая 2011
  SELECT *
    FROM table
   WHERE EVENT_START_DATE >= NOW()
ORDER BY EVENT_START_DATE
   LIMIT 3
1 голос
/ 26 августа 2018

Запрос из принятого ответа фактически просто сортирует ранее выбранные значения, а не фильтрует их перед выбором. Но этот запрос у меня работает:

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

Пояснение: число 10 - дневной диапазон (как после, так и до). Без ABS() вы можете выбрать только предыдущие или будущие события, но мне нужно было самое близкое.

0 голосов
/ 31 мая 2011

Полагаю, это то, что вы искали.Это похоже на ответы всех остальных.

SELECT EVENT_ID FROM TABLE WHERE EVENT_START_DATE > NOW() ORDER BY ABS(DATEDIFF(EVENT_START_DATE, NOW())) ASC LIMIT 3
0 голосов
/ 31 мая 2011
SELECT event_id FROM Table ORDER BY EVENT_START_DATE LIMIT 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...