在MySQL中使用INTERVAL和CURDATE

问题描述 投票:38回答:3

我正在构建图表,并且希望接收每个月的数据。

这是我的第一个有效的请求:

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

mysql datetime date intervals
3个回答
64
投票

您需要DATE_ADD/DATE_SUB

DATE_ADD/DATE_SUB

应该工作。


24
投票

如A Star所建议,我总是按照以下方式使用:

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

类似地,您可以做:

DATE(NOW()) - INTERVAL 1 MONTH

依此类推。比一直输入NOW() + INTERVAL 5 MINUTE "2013-01-01 00:00:00" + INTERVAL 10 DAY DATE_ADD容易得多:)!


16
投票

我通常使用

DATE_SUB

与Pekka几乎相同,但是通过这种方式,您可以将时间间隔控制为负值或正值...


-1
投票

czxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczxczx

© www.soinside.com 2019 - 2024. All rights reserved.