首页 > 解决方案 > MYSQL 查询获取过去 30 天的每日数据计数,即使任何日期的数据都不存在

问题描述

我有表:“订单”(order_id,order_processed_date)。我想要过去 30 天每天的订单数。如果任何日期有 0 个订单,那么它应该打印 0。

像这样的东西:

total  | date
1      | 2018-10-20
0      | 2018-10-19
0      | 2018-10-18
0      | 2018-10-17
2      | 2018-10-16
0      | 2018-10-15
1      | 2018-10-14
0      | 2018-10-13
0      | 2018-10-12
1      | 2018-10-11
1      | 2018-10-10
5      | 2018-10-09
1      | 2018-10-08

依此类推,直到 2018-09-20。我已经在 stackoverflow 中搜索并获得了一些查询,但没有找到确切的解决方案。我使用下面的查询得到结果,但它只记录日期没有 0 个订单:

SELECT COUNT(order_id) AS total, DATE(order_processed_date) AS date
FROM orders 
WHERE order_processed_date BETWEEN '2018-09-20' AND '2018-10-20'
GROUP BY DATE(order_processed_date)
ORDER BY order_processed_date DESC

请有人帮我按照我的要求给我结果。

标签: phpmysql

解决方案


您可以尝试使用日历表此处描述了一个示例。基本上,这是一个带有有序日期列表的表格(如果您愿意,还可以添加额外的属性)。

LEFT JOIN您可以使用日历表orders,并使用 aGROUP BY来获取结果,例如每月。

祝你好运。


推荐阅读