我希望计算每天每篇文章在过去30天内发生的所有综合浏览量。
我的数据集如下所示。发生的每个网页浏览,添加新行以及收到的日期和时间,发生视图的文章ID以及此分析不需要的一些其他信息。由于我没有每篇文章的每日综合浏览量,因此这个问题更难以解决
received_at article_id other_info_1 other_info_2
---------- ---------- ------------ ------------
2017-01-04 04:03:01 +0000 987 17 desktop
2017-01-05 07:03:23 +0000 987 23 mobile
2017-01-03 01:09:10 +0000 123 1 mobile
2017-02-20 11:32:20 +0000 123 17 desktop
2017-02-01 09:03:01 +0000 123 17 tablet
2017-01-04 04:11:04 +0000 567 17 desktop
我想得到的是以下内容
article_id date Previous 30 day count
---------- ---- ---------------------
123 2017-02-20 90
123 2017-02-19 130
123 2017-02-18 45
456 2017-02-20 10
456 2017-02-19 100
456 2017-02-18 89
789 2017-02-20 235
789 2017-02-19 130
789 2017-02-18 89
每天我都希望获得该文章前30天发生的总观看次数
有什么想法吗?
谢谢
如果我们假设每篇文章每天至少被查看一次,那么您可以进行累积总和:
select trunc(received_at) as dte, article_id,
sum(count(*)) over (partition by article_id
order by trunc(received_at)
rows between 29 preceding and current row
) as prev_30_day_count
from t
group by dte, article_id
order by dte, article_id;
如果每天至少有一个视图,这将无法正常工作。 Redshift中最好的方法可能是实际创建数据:
select a.article_id, d.dte, count(t.article_id) as day_views,
sum(count(t.article_id)) over (partition by a.article_id
order by d.dte
rows between 29 preceding and current row
) as prev_30_day_count
from (select distinct trunc(received_at) as dte from t) d cross join
(select distinct article_id from t) a left join
t
on d.dte = trunc(t.received_at) and a.article_id = t.article_id
group by d.dte, t.article_id;
这假设每天至少有一个关于任何文章的视图。