Athena或Quicksight上的滚动计数

问题描述

我有这个数据集

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