2016-04-14 113 views
0

我可以使用下面的代碼從過去的任意天數中選擇數據,但如果我只想要上個月的數據(例如,從60天前到30天前。SQL選擇上個月的數據

我想我可能能夠使用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

該查詢從今天開始選擇過去30天。在間隔的開始日期和結束日期使用DATE_SUB,您可以選擇過去60-30天之間的日期。 – Pablo

回答

1

這是一個評論太長:

Date(OrderDate) < DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND 
Date(OrderDate) >= DATE_SUB(CURDATE(), INTERVAL 60 DAY) 

注意:如果OrderDate已經是日期,那麼請不要使用DATE()函數。它可以防止使用索引。

即使OrderDate有時間分量,您可能仍然不需要DATE()函數。

0

你知道MySQL函數MONTH()NOW()嗎?您可以在where子句中使用這些:

MONTH(OrderDate) = MONTH(NOW()) - 1 

當然,這需要進行微調,例如幾年(以獲得十二月如果是1月)。

0

我相信DATE_SUB()功能支持使用MONTH作爲間隔,所以你應該能夠使用,如果你想要的數據上個月從當前日期:

Date(OrderDate) > DATE_SUB(CURDATE(),INTERVAL 1 MONTH) 
0

你可以使用這樣的

SELECT 
    product, 
    COUNT(OrderNumber) AS CountOf 
FROM 
    orders 
WHERE 
    STATUS = 'booking' AND 
    YEAR(orderdate) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) 
    AND MONTH(orderdate) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH) 
GROUP BY 
    product 
ORDER BY CountOf DESC