MySQL Query来计算上个月

时间:2009-07-16 14:52:57

标签: mysql

我想计算上个月的总订单金额。

我收到了从当前日期获取当月数据的查询。

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。

但我不知道如何计算前几个月。

6 个答案:

答案 0 :(得分:55)

在这里,使用它来获取MySQL上个月1日和上个月的最后一个日期之间的日期:

... 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')

答案 1 :(得分: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')

答案 2 :(得分:5)

最简单的解决方案:

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)

答案 3 :(得分:0)

如果你很懒,那么使用起来很方便

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

我认为这也增加了可读性。

答案 4 :(得分: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) 

这也有效。

答案 5 :(得分: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));