【发布时间】:2019-08-30 14:11:35
【问题描述】:
我想计算在过去 y 天内活跃 x 次或多次的活跃用户的滚动数量。为简单起见,假设在 5 天内 > 3 次
我拥有的数据是形式
| date | user_id |
------------------
|2019-01-01 | user1 |
|2019-01-01 | user2 |
|2019-01-01 | user1 |
|2019-01-02 | user1 |
|2019-01-02 | user3 |
|2019-01-02 | user4 |
|2019-01-03 | user2 |
|2019-01-03 | user3 |
我尝试使用聚合函数按日期对 user_id 进行分组,并使用窗口函数对前 5 行中存在 >3 次的用户求和。 按日期聚合用户可以使用:
SELECT date, ARRAY_AGG(distinct user_id) as users
FROM `table`
WHERE date > DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
GROUP BY date
像这样返回一个数组结构。
| date | users |
------------------
|2019-01-01 | user1 |
| | user2 |
|2019-01-02 | user1 |
| | user3 |
| | user4 |
|2019-01-03 | user2 |
| | user3 |
但我在这里卡住了。我可以做这样的事情吗?但是我应该使用什么分析函数呢?
WITH activity as (
SELECT date, ARRAY_AGG(distinct user_id) as users
FROM `table`
WHERE date > DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
GROUP BY date
)
SELECT date, xxxx OVER (PARTITION BY date ORDER BY date ROWS 5 PRECEDING) as returning_users
FROM activity
我想要的输出是:
| date | returning_users |
------------------
|2019-01-01 | 123 |
|2019-01-02 | 1234 |
|2019-01-03 | 12345 |
【问题讨论】:
标签: google-bigquery window-functions