web-dev-qa-db-fra.com

Requête SQL pour afficher la date la plus proche?

J'essaie de comprendre comment écrire une requête MySQL qui renverra les 3 événements les plus proches en termes de date.

Ceci est ma table:

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

Donc, le résultat de la requête devrait être pour les ID 1, 2, car ils sont les plus proches de la date actuelle.

EDIT: query ne doit trouver que des événements futurs.

31
Or Weinberger
SELECT event_id 
FROM Table 
ORDER BY ABS( DATEDIFF( EVENT_START_DATE, NOW() ) ) 
LIMIT 3

ABS() signifie qu'un événement d'il y a un jour est aussi proche qu'un événement d'un jour à venir Si vous voulez seulement des événements qui ne se sont pas encore produits, alors

SELECT event_id 
FROM Table 
WHERE EVENT_START_DATE > NOW() 
ORDER BY EVENT_START_DATE 
LIMIT 3 
62
Mat
  SELECT *
    FROM table
   WHERE EVENT_START_DATE >= NOW()
ORDER BY EVENT_START_DATE
   LIMIT 3
3
hsz

En fait, la requête de la réponse acceptée ne fait que trier les valeurs précédemment sélectionnées, pas les filtrer avant la sélection. Mais cette requête fonctionne pour moi:

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

Explication: le nombre 10 est une plage de jours (après et avant). Sans ABS(), vous ne pouvez sélectionner que les événements précédents ou futurs, mais j’avais besoin du plus proche.

1
Damjan Pavlica
SELECT event_id FROM Table ORDER BY EVENT_START_DATE LIMIT 3
0
xecaps12

Je suppose que c'est ce que vous recherchez. C'est semblable à tout le monde réponses elses aussi.

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