我可以使用以下代码从过去的任意天数中选择数据,但如果我只想要上个月的数据,例如从60天前到30天前。
我以为我可以使用INTERVAL 60 - 30
,但我不确定它是否有效......
SELECT
product,
COUNT(OrderNumber) AS CountOf
FROM
orders
WHERE
STATUS = 'booking' AND
Date(OrderDate) <= CURDATE() AND
Date(OrderDate) > DATE_SUB(CURDATE(),INTERVAL 30 DAY)
GROUP BY
product
ORDER BY CountOf DESC
思想?
答案 0 :(得分:1)
评论太长了:
Date(OrderDate) < DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND
Date(OrderDate) >= DATE_SUB(CURDATE(), INTERVAL 60 DAY)
注意:如果OrderDate
已经是日期,则请勿使用DATE()
功能。它可以防止使用索引。
即使OrderDate
有时间成分,您可能仍然不需要DATE()
功能。
答案 1 :(得分:0)
你知道MySQL函数MONTH()
和NOW()
吗?您可以在where子句中使用这些:
MONTH(OrderDate) = MONTH(NOW()) - 1
当然,需要对此进行微调,例如多年(如果是1月份则需要12月)。
答案 2 :(得分:0)
我相信DATE_SUB()
函数支持使用MONTH
作为间隔,因此如果您想要从当前日期开始的前一个月的数据,您应该能够使用它:
Date(OrderDate) > DATE_SUB(CURDATE(),INTERVAL 1 MONTH)
答案 3 :(得分:0)
你可以使用这样的东西
{{1}}