SQL选择上个月的数据

时间:2016-04-14 14:08:26

标签: mysql sql

我可以使用以下代码从过去的任意天数中选择数据,但如果我只想要上个月的数据,例如从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

思想?

4 个答案:

答案 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}}