用于滑动窗口聚合的Bigquery SQL

pra*_*rat 7 sql aggregate-functions moving-average sliding-window google-bigquery

嗨我有一张看起来像这样的桌子

Date         Customer   Pageviews
2014/03/01   abc          5
2014/03/02   xyz          8
2014/03/03   abc          6
Run Code Online (Sandbox Code Playgroud)

我想获得按周分组的页面视图聚合,但显示过去30天的聚合 - (每周30天的窗口大小的滑动窗口聚合)

我正在使用google 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
Run Code Online (Sandbox Code Playgroud)

然而,为了保持简单,如果我只是得到一个滑动窗口聚合的网页浏览而忽略了客户,我会按照自己的方式工作.这样的事情

Date        count of pageviews in 30day window
2014/02/01  50
2014/02/08  55
2014/02/15  65
2014/02/22  75
Run Code Online (Sandbox Code Playgroud)

Fel*_*ffa 9

这个怎么样:

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
Run Code Online (Sandbox Code Playgroud)

对于每个用户,它会计算每周提交的更改数量.然后使用LAG()我们可以查看下一行,他们提交的-1,2和-3周的变化数量.然后,我们只需添加这4周,即可查看过去28天内提交的更改数量.

现在,您可以将所有内容包装在新查询中,以过滤更改> X的用户,并对其进行计数.