一周内不同的日期计数
Posted
技术标签:
【中文标题】一周内不同的日期计数【英文标题】:Date distinct count over week 【发布时间】:2021-02-14 14:57:59 【问题描述】:我试图以每周作为不同标识的分区,每天获取不同数量的用户 ID 日志。 例如如果一个用户在第 1 周的星期五/星期六和第 2 周的星期一/星期五登录,我希望有一个列在星期五计算为 1,在星期六第 1 周计算为 0,在星期一计算为 1,在星期五第 2 周计算为 0。
如果我有以下数据:
我期待这个结果:
我正在使用 Presto,并尝试过使用 dense_rank() 解决方案,但无济于事。
【问题讨论】:
【参考方案1】:您可以使用窗口函数和聚合:
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
【讨论】:
是的!这正是我所需要的,非常感谢您 请注意,Presto 支持过滤聚合 (prestosql.io/docs/current/functions/…),因此您可以这样做:count(*) FILTER (WHERE rn = 1) AS cnt
。
@PiotrFindeisen:感谢您提供的信息,我确实不知道。为 Presto +1!以上是关于一周内不同的日期计数的主要内容,如果未能解决你的问题,请参考以下文章