2009-07-16 89 views
18

我想計算上個月的總訂單金額。MySQL Query計算上個月

我得到了從當前日期獲取當前月份數據的查詢。

SELECT SUM(goods_total) AS Total_Amount FROM orders 
WHERE order_placed_date >= date_sub(current_date, INTERVAL 1 MONTH); 

現在我怎樣才能得到前幾個月的數據只有本月不包括在內。

例如,本月(7月)我賺了15,000美元,上個月(6月)我賺了14,000美元。

我通過運行上述查詢得到15,000美元。

但我不知道如何計算前幾個月。

+0

「在哪裏,」 - 取出AND。 – 2009-07-16 14:58:13

+0

感謝您指出,我無意中在那裏。 – 2009-07-16 15:08:49

回答

47

在這裏你去,以此來獲得最後一個月的第一個和最後上個月的日期在MySQL:如果你是懶惰它還挺方便使用

... order_placed_date BETWEEN DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01 00:00:00') AND DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 1 MONTH), '%Y-%m-%d 23:59:59')

+0

不客氣。幾個月前我遇到了同樣的問題,並提出了這個問題。 – 2009-07-16 14:59:03

+1

謝謝你的工作完美,結果與我的數據相符。 – 2009-07-16 14:59:28

+0

我使用的是current_date而不是NOW() – 2009-07-16 15:09:20

0

...date_format(order_placed_date, '%Y-%m') = date_format(now() - INTERVAL 1 MONTH, '%Y-%m')

我認爲這也增加了可讀性。

0

這裏是另一種方式,我發現:

SELECT SUM(goods_total) AS Total_Amount FROM orders 
WHERE SUBSTRING(o.order_placed_date FROM 1 FOR 7) = SUBSTRING(CURRENT_DATE - INTERVAL 1 MONTH FROM 1 FOR 7) 

這工作也是如此。

7

我發現Artem的查詢沒有從上個月的最後一天返回任何東西(可能是因爲BETWEEN會從最後一天的時間00:00:00開始計算)。

這似乎適用於我在前一個月。

order_placed_date BETWEEN DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01') 
AND DATE_FORMAT(NOW() ,'%Y-%m-01') 
0

這裏的另一個解決方案 - 無需stringoperation

SELECT SUM(goods_total) AS Total_Amount FROM orders 
WHERE DATE(order_placed_date) 
BETWEEN DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) 
AND LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)); 
3

簡單的解決方案:

SELECT SUM(goods_total) AS Total_Amount FROM orders 
WHERE YEAR(order_placed_date) = YEAR(CURDATE() - INTERVAL 1 MONTH) 
AND MONTH(order_placed_date) = MONTH(CURDATE() - INTERVAL 1 MONTH)