非常简化,一个包含一些示例数据的表格:
action_date account_id
1/1/2010 123
1/1/2010 123
1/1/2010 456
1/2/2010 123
1/3/2010 789
对于上面的数据,我需要一个查询,它将给出以下内容:
action_date num_events num_unique_accounts num_unique_accounts_wtd
1/1/2010 3 2 2
1/2/2010 1 1 2
1/3/2010 1 1 3
正如您在此处看到的, num_unique_accounts_wtd 给出了唯一时期的一种滚动结束日期......
起初,人们会认为是形式的查询
WITH
events AS
(
SELECT
action_date
, COUNT(account_id) num_events
, COUNT(DISTINCT account_id) num_unique_accounts
FROM actions
GROUP BY action_date
)
SELECT
action_date
, num_events
, num_unique_accounts
, SUM(num_unique_accounts) OVER (PARTITION BY NEXT_DAY(action_date, 'Monday') - 7 ORDER BY action_date ASC) num_unique_accounts_wtd
FROM events
会起作用,但如果你仔细观察,它只会每天添加 num_unique_accounts。如果要在 2010 年 1 月 2 日运行查询,为了清楚起见,它会给出 num_unique_accounts_wtd = 3,因为 2 + 1。
有任何想法吗?
编辑:为清楚起见,又添加了一行数据和输出