我有一张用户表以及他们在给定日期触发的事件数:
日期 | 用户身份 | 活动 |
---|---|---|
2021-08-27 | 1 | 5 |
2021-07-25 | 1 | 7 |
2021-07-23 | 2 | 3 |
2021-07-20 | 3 | 9 |
2021-06-22 | 1 | 9 |
2021-05-05 | 1 | 4 |
2021-05-05 | 2 | 2 |
2021-05-05 | 3 | 6 |
2021-05-05 | 4 | 8 |
2021-05-05 | 5 | 1 |
我想创建一个表格,显示每个日期的活跃用户数,其中活跃用户被定义为在给定日期或之前 30 天内的任何一天触发事件的人。
日期 | ACTIVE_USERS |
---|---|
2021-08-27 | 1 |
2021-07-25 | 3 |
2021-07-23 | 2 |
2021-07-20 | 2 |
2021-06-22 | 1 |
2021-05-05 | 5 |
我尝试了以下查询,该查询仅返回在指定日期处于活动状态的用户:
SELECT COUNT(DISTINCT USERID), DATE
FROM table
WHERE DATE >= (CURRENT_DATE() - interval '30 days')
GROUP BY 2 ORDER BY 2 DESC;
我也尝试使用一个窗口函数,其间有行,但似乎最终得到了相同的结果:
SELECT
DATE,
SUM(ACTIVE_USERS) AS ACTIVE_USERS
FROM
(
SELECT
DATE,
CASE
WHEN SUM(EVENTS) OVER (PARTITION BY USERID ORDER BY DATE ROWS BETWEEN 30 PRECEDING AND CURRENT ROW) >= 1 THEN 1
ELSE 0
END AS ACTIVE_USERS
FROM table
)
GROUP BY 1
ORDER BY 1
我在雪花上使用 SQL:ANSI。任何建议将不胜感激。