我想计算上个月的总订单金额。
我收到了从当前日期获取当月数据的查询。
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 :(得分: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));