问题描述
我有这个数据集
date id
1/1/2020 1
1/1/2020 2
...
n m
我希望在AWS Quicksight或Athena上有不同每月用户的滚动计数。例如
date MAU
1/1/2020 -
1/2/2020 -
1/30/2020 100
1/31/2020 102
2020年1月30日的100表示在过去30天中有100个不同的用户处于活动状态(从2020年1月1日到2020年1月30日)。在1/31/2020上为102,表示在过去30天中有102个不同的用户处于活动状态(从1/2/2020到1/30/2020)
解决方法
基本思想是将窗口计数与范围框架一起使用。如果我们将日期转换为一个纪元并使用以下范围框架,它是否可以在Amazon Athena中使用?
select date,sum(count(*)) over(
order by to_unixtime(date)
range between - 60 * 60 * 24 * 30 preceding and current row
) mau
from mytable
group by date
窗口函数解决方案的另一种选择是相关子查询:
select date,count(*) + (
select count(*)
from mytable t1
where t1.date >= t.date - interval '30' day and t1.date < t.date
) mau
from mytable
group by date