2011-05-31 53 views
29

Estoy tratando de averiguar cómo escribir una consulta MySQL que devolverá los 3 eventos más cercanos en términos de fecha.Consulta SQL para mostrar la fecha más cercana?

Esta es mi mesa:

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 

lo tanto, el resultado de la consulta debe ser de 1,2,5 de Identificación, ya que son los más cercanos a producirse en comparación con la fecha actual ..

EDITAR : consulta debería encontrar solo eventos futuros.

+1

Esas fechas son en 2010, lo que en realidad 4, 3 y 2 son los más cercanos al ahora :) he asumido que significaba esas fechas a ser 2011. – Mat

+0

@Mat wow, completamente perdido eso. Lo sentimos, corregido en 2011 –

Respuesta

52
SELECT event_id 
FROM Table 
ORDER BY ABS(DATEDIFF(EVENT_START_DATE, NOW())) 
LIMIT 3 

El ABS() significa que hace un día del evento 1 es tan estrecha como un evento de día 1 en el futuro. Si solo desea eventos que aún no ocurrieron, haga

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

¿'DATEDIFF()' funciona con marcas de tiempo Unix también? –

0
SELECT event_id FROM Table ORDER BY EVENT_START_DATE LIMIT 3 
+0

Eso también devolverá event_id 6, que ocurre en el pasado. –

+1

sería mejor si fuera esto: SELECCIONE event_id FROM Tabla EVENT_START_DATE> = CURRENT_TIMESTAMP ORDER BY EVENT_START_DATE LIMIT 3 –

2
SELECT * 
    FROM table 
    WHERE EVENT_START_DATE >= NOW() 
ORDER BY EVENT_START_DATE 
    LIMIT 3 
0

Supongo que esto es lo que estaría buscando. Es similar a todas las respuestas de los demás también.

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