php - 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
请有人帮我按照我的要求给我结果。
解决方案
您可以尝试使用日历表,此处描述了一个示例。基本上,这是一个带有有序日期列表的表格(如果您愿意,还可以添加额外的属性)。
LEFT JOIN
您可以使用日历表orders
,并使用 aGROUP BY
来获取结果,例如每月。
祝你好运。
推荐阅读
- php - 我需要通过套件 CRM API 链接两个新条目
- javascript - 调用引用对象属性的方法会引发 ReferenceError
- c# - 使用json(反)序列化多个对象时出现空问题
- php - 如何使用 ajax 从 mysql 数据库的引导模式中显示当前插入的数据?
- node.js - 在 nestjs 中更改 JSON 响应
- django - = 和 html 中的 3D 字符 | 非ASCII字符| 引用可打印 | Django 电子邮件模板
- lambda - 使用 groupby 的 print 和 lambda 函数
- android - How to putExtra data from strings.xml
- javascript - 如何使按键在按下时只触发一次?
- c - 返回带有指向内部结构数组的指针成员的结构是否安全?