我有一个表Service
,它存储了销售记录和导致销售的推荐类型。我需要知道给定的推荐类型在一个日期范围内产生的销售总数。Service
中的相关数据如下所示:
+------+-------+------------+
| uuid | sr_id | s_saledate |
+------+-------+------------+
| | 1 | 2020-01-01 |
| | 1 | 2020-01-01 |
| | 2 | 2021-01-01 |
| | 2 | 2021-01-01 |
| | 1 | 2021-01-01 |
+------+-------+------------+
我想计算给定日期范围内每种推荐类型(sr_id
)的销售数量。
如果我的日期范围是2020-01-01到2021-01-01,我的输出应该如下所示:
+------+-------+------------+----------------------+
| uuid | sr_id | date | num_sales_as_of_date
+------+-------+-----------------------------------+
| | 1 | 2020-01-01 | 2 |
| | 1 | 2020-01-02 | 2 |
| | 1 | 2020-01-03 | 2 |
........................................................ < many rows for days in range
1 2021-01-01 | 3
| | 2 | 2020-01-01 | 0 |
| | 2 | 2020-01-02 | 0 |
........................................................ < many rows for days in range
| | 2 | 2020-01-01 | 2 |
+------+-------+-----------------------------------+
在该范围内的每个日期,每种推荐类型都应占一行。
现在,我的查询如下所示:
SELECT s.sr_id,
s.s_saledate AS date,
Count(s.uuid)
OVER (
partition BY s.sr_id
ORDER BY s.s_saledate) AS num_sales_as_of_date
FROM Service s
如何获取没有具有特定转诊类型ID的服务的日期中每个转诊类型的累计金额?编辑以进行澄清
例如,在我给予的第一个表中,“服务”表中没有sr_id = '1'且s_saledate ===“2020-01-02”的“服务”行。有两行来自前几天,其中sr_id = '1'.(2020-01-01)。“2020-01-02”的输出行为:
sr_id date num_sales_as_of_date
1 | 2020-01-02 | 2 |
1条答案
按热度按时间enyaitl31#
您需要从包含该范围内所有日期的表和包含所有推荐类型的表左联接“服务”表,以便获得包含每个日期和推荐类型组合的行:
fiddle
如果您经常这样做,那么创建一个包含从0000-01-01到9999-12-31的所有日期的实际表
dates
并使用它(在where子句中选择所需范围内的日期)可能会更方便。