2009-11-11 52 views
53

Estaba jugando con MYSQL y sé que hay un comando de límite que muestra una cierta cantidad de resultados, pero me preguntaba si MySQL solo puede mostrar solo los últimos 3 días o algo así. Sólo me preguntaba.MySQL SELECT últimos días?

Actualización: He utilizado AHORA() para almacenar veces.

+0

@Doug, por favor, nos dan un poco más de información. ¿Cómo su registro reconoce el tiempo DATETIME, DATE, TIMESTAMPs, epoch timestamps, etc.? ¿Desea los últimos tres días a partir de ahora (CURRENT_DATE() - INTERVAL 3 DÍAS) o del registro más reciente? Etc. – pilcrow

Respuesta

115

uso para una fecha hace tres días:

WHERE t.date >= DATE_ADD(CURDATE(), INTERVAL -3 DAY); 

Comprobar la documentación DATE_ADD.

O puede utilizar:

WHERE t.date >= (CURDATE() - INTERVAL 3 DAY) 
+3

"WHERE t.date> = (CURDATE() - INTERVAL 3 DAY)" debería ser suficiente –

+0

MUY INTERESANTE! Intenté ejecutar eso con DATE_ADD y siguió fallando debido a la sintaxis. Sin embargo, funcionó sin DATE_ADD, por lo que solo usé 'CURDATE() - INTERVAL 3 DAY'. ¿Porqué es eso? – Strawberry

+1

Lo estaba ejecutando a través de phpmyadmin si eso hace la diferencia. – Strawberry

2

Puede usar una combinación de la función UNIX_TIMESTAMP() para hacer eso.

SELECT ... FROM ... WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(thefield) < 259200 
+1

@Turnor, cuidado, los días no siempre consisten en 86,400 segundos, lo que con los segundos intercalares y los ahorros de luz diurna. – pilcrow

+0

Es cierto. Pero es raro que necesites ese nivel de precisión, y no sonaba como la pregunta original. – Turnor

+0

@pilcrow Teniendo esto en cuenta, ¿cómo abordarías la pregunta, entonces? –

-2

WHERE t.date >= DATE_ADD(CURDATE(), INTERVAL '-3' DAY);

cotizaciones ser usados ​​en la -3 valor

9

Puede utilizar esto en su MySQL cláusula WHERE para devolver registros que se crean dentro de la última 7 días/semana:

created >= DATE_SUB(CURDATE(),INTERVAL 7 day)

También use NOW() en la resta para obtener la resolución hh: mm: ss. Así que para devolver los registros creados exactamente (al segundo) dentro de los últimos 24 horas, se podría hacer:

created >= DATE_SUB(NOW(),INTERVAL 1 day)

-2
SELECT DATEDIFF(NOW(),pickup_date) AS noofday 
FROM cir_order 
WHERE DATEDIFF(NOW(),pickup_date)>2; 

o

SELECT * 
FROM cir_order 
WHERE cir_order.`cir_date` >= DATE_ADD(CURDATE(), INTERVAL -10 DAY) 
Cuestiones relacionadas