在MySQL中使用INTERVAL和CURDATE

时间:2010-05-08 09:59:53

标签: mysql datetime date intervals

我正在构建图表,我希望每个月都能收到数据。

这是我的第一个请求:

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的例子吗?

3 个答案:

答案 0 :(得分:64)

您需要DATE_ADD/DATE_SUB

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

应该有用。

答案 1 :(得分:19)

正如A Star所说,我总是使用以下内容:

DATE(NOW()) - INTERVAL 1 MONTH

同样可以:

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

等等。比一直输入DATE_ADDDATE_SUB要容易得多:)!

答案 2 :(得分:16)

我通常使用

DATE_ADD(CURDATE(), INTERVAL - 1 MONTH)

这与Pekka几乎相同,但这样你可以控制你的INTERVAL为负面或正面......