Pregunta Trabajando con INTERVAL y CURDATE en MySQL


Estoy construyendo un cuadro y quiero recibir datos para cada mes.

Aquí está mi primera solicitud que está funcionando:

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, tengo que escribir 12 solicitudes para recibir datos de los 12 meses anteriores, ¿hay algún truco para evitar escribir?

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

Escuché sobre INTERVAL, fui al documento de MySQL pero no logré implementarlo.

¿Algún ejemplo de usar INTERVAL por favor?


32
2018-05-08 09:59


origen


Respuestas:


Necesitas DATE_ADD/DATE_SUB:

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

Deberia trabajar.


59
2018-05-08 10:04



Usualmente uso

DATE_ADD(CURDATE(), INTERVAL - 1 MONTH)

Que es casi igual a la de Pekka, pero de esta forma puedes controlar tu INTERVAL para que sea negativo o positivo ...


15
2018-05-08 10:09



Como lo sugirió A Star, siempre uso algo como:

DATE(NOW()) - INTERVAL 1 MONTH

Del mismo modo, puedes hacer:

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

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


14
2018-04-03 11:37