嗨,我有一张看起来像这样的 table
Date Customer Pageviews
2014/03/01 abc 5
2014/03/02 xyz 8
2014/03/03 abc 6
我想获得按周分组的页面 View 聚合,但显示过去 30 天的聚合 -(滑动窗口聚合,每周窗口大小为 30 天)
我正在使用谷歌 bigquery
编辑:戈登 - 关于“客户”的评论,实际上我需要的是稍微复杂一些,这就是为什么我在上表中包含了客户。我希望获得每周 30 天窗口中浏览量 >n 的客户数量。像这样的东西
Date Customers>10 pageviews in 30day window
2014/02/01 10
2014/02/08 5
2014/02/15 6
2014/02/22 15
然而,为了简单起见,如果我能得到一个滑动窗口的综合浏览量而完全忽略客户,我会按照我的方式工作。像这样的东西
Date count of pageviews in 30day window
2014/02/01 50
2014/02/08 55
2014/02/15 65
2014/02/22 75
最佳答案
这个怎么样:
SELECT changes + changes1 + changes2 + changes3 changes28days, login, USEC_TO_TIMESTAMP(week)
FROM (
SELECT changes,
LAG(changes, 1) OVER (PARTITION BY login ORDER BY week) changes1,
LAG(changes, 2) OVER (PARTITION BY login ORDER BY week) changes2,
LAG(changes, 3) OVER (PARTITION BY login ORDER BY week) changes3,
login,
week
FROM (
SELECT SUM(payload_pull_request_changed_files) changes,
UTC_USEC_TO_WEEK(created_at, 1) week,
actor_attributes_login login,
FROM [publicdata:samples.github_timeline]
WHERE payload_pull_request_changed_files > 0
GROUP BY week, login
))
HAVING changes28days > 0
对于每个用户,它会计算他们每周提交的更改数量。然后使用 LAG() 我们可以查看下一行,他们在 -1、-2 和 -3 周提交了多少更改。然后我们将这 4 周相加,看看在过去 28 天内提交了多少更改。
现在,您可以将所有内容都包装在一个新查询中,以过滤具有更改 > X 的用户,并对其进行计数。
关于sql - 用于滑动窗口聚合的 Bigquery SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22415647/