嗨,我有一张看起来像这样的桌子
Date Customer Pageviews
2014/03/01 abc 5
2014/03/02 xyz 8
2014/03/03 abc 6
我想获得按周分组的页面视图聚合,但显示过去30天的聚合 - (窗口大小为每周30天的窗口大小)
我正在使用google bigquery
编辑:戈登 - 关于“客户”的评论,实际上我需要的内容稍微复杂一点,这就是为什么我将客户纳入上表。我希望每周在30天的窗口中获得具有&n; 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
答案 0 :(得分: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
对于每个用户,它会计算每周提交的更改数量。然后使用LAG()我们可以查看下一行,他们提交的-1,2和-3周的变化数量。然后我们只添加这4周,看看过去28天内提交了多少更改。
现在,您可以将所有内容包装在新查询中,以过滤更改> X的用户,并对其进行计数。
答案 1 :(得分:2)
我创建了以下“时代”表:
Table Details: Dim_Periods
Schema
Date TIMESTAMP
Year INTEGER
Month INTEGER
day INTEGER
QUARTER INTEGER
DAYOFWEEK INTEGER
MonthStart TIMESTAMP
MonthEnd TIMESTAMP
WeekStart TIMESTAMP
WeekEnd TIMESTAMP
Back30Days TIMESTAMP -- the date 30 days before "Date"
Back7Days TIMESTAMP -- the date 7 days before "Date"
我使用这样的查询来处理“运行总和”
SELECT Date,Count(*) as MovingCNT
FROM
(SELECT Date,
Back7Days
FROM DWH.Dim_Periods
where Date < timestamp(current_date()) AND
Date >= (DATE_ADD (CURRENT_TIMESTAMP(), -5, 'month'))
)P
CROSS JOIN EACH
(SELECT repository_url,repository_created_at
FROM publicdata:samples.github_timeline
) L
WHERE timestamp(repository_created_at)>= Back7Days
AND timestamp(repository_created_at)<= Date
GROUP EACH BY Date
请注意,它可以用于“月到日”,周至日期“”30天后“等聚合。 但是,性能不是最好的,并且由于笛卡尔连接,查询在较大的数据集上可能需要一段时间。 希望这有帮助