40 votes

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

J'essaie de trouver comment écrire une requête MySQL qui renvoie les trois événements les plus proches en termes de date.

C'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

Le résultat de la requête devrait donc concerner les ID 1, 2 et 5, car ils sont les plus proches de la date actuelle.

EDIT : La requête ne devrait trouver que des événements futurs.

82voto

Mat Points 2512
SELECT event_id 
FROM Table 
ORDER BY ABS( DATEDIFF( EVENT_START_DATE, NOW() ) ) 
LIMIT 3

El ABS() signifie qu'un événement survenu il y a un jour est tout aussi proche qu'un événement survenu un jour plus tard. Si vous ne voulez que les événements qui ne se sont pas encore produits, faites

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

4voto

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

2voto

Damjan Pavlica Points 7299

La requête de la réponse acceptée ne fait que trier les valeurs précédemment sélectionnées, et non les filtrer avant de les sélectionner. 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 numéro 10 est une fourchette de jours (avant et après). Sans ABS() vous pouvez sélectionner uniquement les événements précédents ou futurs, mais j'avais besoin du plus proche.

0voto

Andre Backlund Points 2510

Je suppose que c'est ce que vous recherchez. C'est similaire aux réponses des autres.

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

-1voto

xecaps12 Points 1976
SELECT event_id FROM Table ORDER BY EVENT_START_DATE LIMIT 3

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X