2010-05-08 15 views
28

Estoy construyendo un gráfico y quiero recibir datos para cada mes.Trabajando con INTERVAL y CURDATE en MySQL

Aquí es mi primera petición que está trabajando:

SELECT s.GSP_nom AS nom, timestamp, AVG(v.vote + v.prix ) /2 AS avg 
FROM votes_serveur AS v 
INNER JOIN serveur AS s ON v.idServ = s.idServ 
WHERE s.valide =1 
AND v.date > CURDATE() -30 
GROUP BY s.GSP_nom 
ORDER BY avg DESC 

Pero, en mi caso he de escribir 12 solicitud para recibir los datos de los últimos 12 meses, ¿hay algún truco para evitar la escritura:

// example for the previous month 
AND v.date > CURDATE() -60 
AND v.date < CURDATE() -30 

Oí hablar de INTERVAL, fui al documento de MySQL pero no pude implementarlo.

¿Algún ejemplo de uso de INTERVAL, por favor?

Respuesta

50

Usted necesita DATE_ADD/DATE_SUB:

AND v.date > (DATE_SUB(CURDATE(), INTERVAL 2 MONTH)) 
AND v.date < (DATE_SUB(CURDATE(), INTERVAL 1 MONTH)) 

debería funcionar.

13

lo general el uso

DATE_ADD(CURDATE(), INTERVAL - 1 MONTH) 

que es casi igual a Pekka del pero de esta manera se puede controlar su INTERVALO a ser negativo o positivo ...

+0

Lo siento amigo, el tuyo no funciona, no sé por qué mysql me dice que no hay resultados:/ –

+0

Bueno, debería ser: AND v.date confiq

+7

Uso 'AHORA() - INTERVALO 1 MES –

12

Como se sugiere por una estrella, yo siempre uso algo a lo largo de las líneas de:

DATE(NOW()) - INTERVAL 1 MONTH 

del mismo modo que puede hacer:

NOW() + INTERVAL 5 MINUTE 
"2013-01-01 00:00:00" + INTERVAL 10 DAY 

y así sucesivamente. Mucho más fácil que escribir DATE_ADD o DATE_SUB todo el tiempo :)!

Cuestiones relacionadas