我非常努力地生成过去 7 天内每一天的总销售额数据集,并填补缺失的天数。
对于我的示例数据,我正在寻找的结果是:
2019-01-05 0
2019-01-06 0
2019-01-07 0
2019-01-08 0
2019-01-09 0
2019-01-10 1
2019-01-11 0
我得到的是:
2019-01-05 0
2019-01-06 0
2019-01-07 0
2019-01-08 0
2019-01-09 0
2019-01-10 0
2019-01-11 0
示例数据,尽管为 SO 缩短了,看起来像这样,只有一行:
id | saleID | amount | created
---|-------------------|-------------|-------------
1 | 6032b317-1533.... | 20000 | 2019-01-10 23:56:4
ID = INT 11 Auto
saleID = CHAR 36 INDEX
amount = INT 11 INDEX
created = DATETIME INDEX
我的查询现在看起来像这样:
SELECT
qb.dy AS saleDay,
COALESCE(COUNT(ets.saleID), 0) AS saleDayTotal
FROM eventTicketSales AS ets
RIGHT JOIN (
SELECT curdate() AS dy UNION
SELECT DATE_SUB(curdate(), INTERVAL 1 DAY) AS dy UNION
SELECT DATE_SUB(curdate(), INTERVAL 2 DAY) AS dy UNION
SELECT DATE_SUB(curdate(), INTERVAL 3 DAY) AS dy UNION
SELECT DATE_SUB(curdate(), INTERVAL 4 DAY) AS dy UNION
SELECT DATE_SUB(curdate(), INTERVAL 5 DAY) AS dy UNION
SELECT DATE_SUB(curdate(), INTERVAL 6 DAY) AS dy
) AS qb ON ets.created = qb.dy AND ets.created > DATE_SUB(curdate(), INTERVAL 7 DAY)
GROUP BY qb.dy
ORDER BY qb.dy ASC;
您可以 play with a fiddle here .
请告诉我我做错了什么,并建议如何解决。
谢谢。
最佳答案
... AS qb ON ets.created = qb.dy
您正在将日期时间与没有时间的日期进行比较。这不匹配,因为时间显然不相同。
要解决这个问题,您可以在比较之前将日期时间转换为日期,使用 DATE
函数:
... AS qb ON DATE(ets.created) = qb.dy
关于mysql - 过去 7 天的返回计数,已填写缺失日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54149699/