【问题标题】:Add missing dates when using GROUP BY in SQLITE在 SQLITE 中使用 GROUP BY 时添加缺少的日期
【发布时间】: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。它们是常见的做法,在这种情况下是处理问题的最简单方法。

标签: python database sqlite


【解决方案1】:

您应该将 CTE 与表进行 LEFT 连接:

WITH Dates(date) AS (
  SELECT date(CURRENT_DATE, '-7 day')
  UNION ALL
  SELECT date(date, '+1 day') 
  FROM Dates
  WHERE date < CURRENT_DATE
)
SELECT strftime('%d/%m', d.date) AS Days, 
       COUNT(s.id) AS Sales
FROM Dates d LEFT JOIN Sale s 
ON date(s.time, 'unixepoch') = d.date
GROUP BY d.date
ORDER BY d.date DESC;

请注意,如果您想要包括当天在内的最近 7 天的结果,您应该使用 date(CURRENT_DATE, '-6 day') 而不是 date(CURRENT_DATE, '-7 day') 作为开始日期。

请参阅demo

【讨论】:

  • 太棒了!非常适合每日报告。是否可以对其进行修改以生成月度甚至年度报告?
  • 以下参数更改后,查询似乎没有正确添加一个月的销售额:SELECT date(CURRENT_DATE, '-4 month'), SELECT date(date, '+1 month')
  • @acer 您可以修改开始和结束日期以获取您想要的任何报告。你只需要选择正确的日期。如果您想将分组从几天更改为几个月或几年,您还必须更改 ON 子句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 2012-05-05
  • 2012-01-11
  • 2020-05-07
相关资源
最近更新 更多