【发布时间】:2021-12-30 04:44:55
【问题描述】:
我有一个下表,其中包含 UNIX Epoch 中的每次销售并记录销售时间。
销售:
id | product_id | salesperson_id | time
--------------------------------------------
1 | 1 | 3 | 1638263007
2 | 1 | 2 | 1638262007
3 | 2 | 2 | 1638261007
我想生成如下所示的每日销售报告:
Days | Sales
-------------
27/12 | 10
26/12 | 2
**-- missing 25/12 --**
24/12 | 2
显然没有 25/21,因为那天没有销售。但是,我希望它在这样的日子里显示 0 销售额。我正在生成日期以加入他们,但我仍然面临同样的问题,即由于当天没有销售而缺少某些日期。
WITH RECURSIVE Dates(date) AS (
VALUES(date('now', '-7 day'))
UNION ALL
SELECT date(date, '+1 day')
FROM Dates
WHERE date < date('now')
)
SELECT strftime('%d/%m', Dates.date) AS Days, COALESCE(COUNT(*), 0) AS Sales
FROM Sale
LEFT JOIN Dates ON strftime('%d/%m', DATETIME(Sale.time, 'unixepoch')) = Days
WHERE Sale.time >= strftime('%s', 'now', '-7 day')
GROUP BY Days
ORDER BY Sale.time DESC
我可以做些什么来获得以下输出吗?
Days | Sales
-------------
27/12 | 10
26/12 | 2
25/12 | 0
24/12 | 2
【问题讨论】:
-
这在 Python 中很容易处理,而不是试图想出一个 SQL hack。
-
@TimRoberts 递归 ctes 不是 hack。它们是常见的做法,在这种情况下是处理问题的最简单方法。