2011-09-12 27 views
7

Tengo datos que tienen una columna de fecha (Y-m-d H: i: s) (el tipo es datetime). Me gustaría seleccionar todos los registros de 1 semana antes de la fecha que ingresé (en el siguiente ejemplo: 2011-09-17 00:00:00, pero estoy teniendo problemas. Esto es lo que tengo:Seleccionar registros de una semana anterior en mysql

SELECT * FROM emails WHERE (DATE(date) = date_sub(date('2011-09-17 00:00:00'), 1 week)) 

¿Qué estoy haciendo mal Gracias

Respuesta

20

Creo que se está perdiendo INTERVAL en la parte delantera de 1 week:?

SELECT * 
FROM emails 
WHERE (DATE(date) = date_sub(date('2011-09-17 00:00:00'), INTERVAL 1 week)); 

Aquí es una consulta que me encontré que funciona para la parte DATE_SUB():

SELECT * 
FROM wp_posts 
WHERE post_modified > DATE_SUB(CURDATE(), INTERVAL 4 WEEK); 

Se puede utilizar un valor negativo para ir a hacer una "N semanas antes de determinada fecha" consulta así que algo como esto funcionaría:

SELECT * 
FROM wp_posts 
WHERE post_modified > DATE_SUB(CURDATE(), INTERVAL -1 WEEK); 

O:

SELECT * 
FROM emails 
WHERE (DATE(date) = date_sub(date('2011-09-17 00:00:00'), INTERVAL -1 week)) 
+1

gracias. Usé el primer código que ingresaste (necesitaba agregar "interno" antes de "1 semana"). –

3

Prueba de esto, yo desea seguir con DATE_ADD y solo usar un valor negativo.

SELECT * FROM emails WHERE date >= DATE_ADD('2011-09-17 00:00:00', INTERVAL -1 WEEK) 
3
SELECT * FROM wp_posts 
WHERE post_modified 
BETWEEN SYSDATE() - INTERVAL 7 DAY 
AND SYSDATE(); 
Cuestiones relacionadas