Trabalhar com o intervalo e a CURDATE no MySQL

Estou a construir um gráfico e quero receber dados para cada mês.

Eis o meu primeiro pedido que está a funcionar.
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

mas, no meu caso, tenho de escrever 12 pedidos para receber dados dos 12 meses anteriores, há algum truque para evitar escrever:

//  example for the previous month
 AND v.date > CURDATE() -60
AND v.date < CURDATE () -30
Ouvi falar do INTERVAL, fui ao médico do MySQL, mas não consegui implementá-lo.

algum exemplo de Utilização do INTERVAL, por favor?

Author: halfer, 2010-05-08

3 answers

Tu precisas DATE_ADD/DATE_SUB:

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

Deve funcionar.

 60
Author: Pekka 웃, 2010-05-08 10:04:20

Normalmente uso

DATE_ADD(CURDATE(), INTERVAL - 1 MONTH)
O que é quase igual ao do Pekka, mas desta forma pode controlar o seu intervalo para ser negativo ou positivo...
 16
Author: confiq, 2010-05-08 10:09:35
Como sugere uma estrela, uso sempre algo como:
DATE(NOW()) - INTERVAL 1 MONTH

Da mesma forma você pode fazer:

NOW() + INTERVAL 5 MINUTE
"2013-01-01 00:00:00" + INTERVAL 10 DAY
E assim por diante. Muito mais fácil do que digitar DATE_ADD ou DATE_SUB o tempo todo:)!
 15
Author: seddy, 2015-03-02 15:16:14