Sql 一周内的日期计数

Sql 一周内的日期计数,sql,datetime,count,aggregate-functions,presto,Sql,Datetime,Count,Aggregate Functions,Presto,我试着每天获取一个不同的用户ID日志计数,并将每周作为一个分区用于不同的标识。 e、 g.如果一个用户在第1周的星期五/星期六和第2周的星期一/星期五登录,我希望有一列在星期五计数1,在星期六第1周计数0,在星期一计数1,在星期五第2周计数0 如果我有以下数据: 我期望这一结果: 我正在与Presto合作,并尝试过稠密的_rank()解决方案,但没有效果。您可以使用窗口函数和聚合: select date, iso_week, sum(case when rn = 1 then 1 else

我试着每天获取一个不同的用户ID日志计数,并将每周作为一个分区用于不同的标识。 e、 g.如果一个用户在第1周的星期五/星期六和第2周的星期一/星期五登录,我希望有一列在星期五计数1,在星期六第1周计数0,在星期一计数1,在星期五第2周计数0

如果我有以下数据:

我期望这一结果:


我正在与Presto合作,并尝试过稠密的_rank()解决方案,但没有效果。

您可以使用窗口函数和聚合:

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支持的标准:

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

对这正是我所需要的,非常感谢。请注意,Presto支持过滤聚合(),因此您可以这样做:
count(*)FILTER(其中rn=1)AS cnt
@PiotrFindeisen:感谢您提供的信息,我确实不知道+普雷斯托1分!