Ответ 1
Вам нужно DATE_ADD/DATE_SUB
:
AND v.date > (DATE_SUB(CURDATE(), INTERVAL 2 MONTH))
AND v.date < (DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
должен работать.
Я создаю диаграмму, и я хочу получать данные за каждый месяц.
Здесь мой первый запрос, который работает:
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
Но в моем случае я должен написать 12 запросов на получение данных за 12 предыдущих месяцев, есть ли уловка, чтобы избежать написания:
// example for the previous month
AND v.date > CURDATE() -60
AND v.date < CURDATE () -30
Я слышал о INTERVAL, я пошел в документ MySQL, но мне не удалось его реализовать.
Любой пример использования INTERVAL, пожалуйста?
Вам нужно DATE_ADD/DATE_SUB
:
AND v.date > (DATE_SUB(CURDATE(), INTERVAL 2 MONTH))
AND v.date < (DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
должен работать.
Я обычно использую
DATE_ADD(CURDATE(), INTERVAL - 1 MONTH)
Это почти так же, как и Pekka, но таким образом вы можете контролировать свой INTERVAL как отрицательный или положительный...
Как было предложено A Star, я всегда использую что-то по строкам:
DATE(NOW()) - INTERVAL 1 MONTH
Аналогичным образом вы можете:
NOW() + INTERVAL 5 MINUTE
"2013-01-01 00:00:00" + INTERVAL 10 DAY
и т.д. Намного легче, чем набирать DATE_ADD
или DATE_SUB
все время:)!