一周内的不同日期计数

Date distinct count over week

我正在尝试获取每天的用户 ID 日志的不同计数,每周作为不同标识的分区。 例如如果一个用户在第 1 周的 Friday/Saturday 和第 2 周的 Monday/Friday 上登录,我希望有一个列在第 1 周的星期五计数为 1,在星期六计数为 0,在星期一计数为 1,在星期六计数为 0第 2 周周五

如果我有以下数据:

我期望这样的结果:

我正在使用 Presto,并尝试使用 dense_rank() 解决方案但无济于事。

您可以使用 window 函数和聚合:

select date, iso_week, sum(case when rn = 1 then 1 else 0 end) cnt
from (
    select t.*, 
        row_number() over(partition by userid, iso_week order by date) min_date
    from mytable t
) t
group by date, iso_week

更好的是,使用 Presto 支持的标准 where clause to aggregate functions

select date, iso_week, count(*) filter(where rn = 1) cnt
from (
    select t.*, 
        row_number() over(partition by userid, iso_week order by date) min_date
    from mytable t
) t
group by date, iso_week