-- 查询每个用户在2023年1月1日至2023年1月31日期间的最大连续登录天数
select distinct user_id,
max(consec_days) as max_consec_days -- 计算每个用户的最大连续登录天数
from (
-- 计算每个用户在每个连续登录段内的天数
select user_id,
date2,
count(date2) as consec_days -- 计算每个连续登录段的天数
from (
-- 计算每个用户每天的登录日期,并计算日期差值
select user_id,
fdate,
date_sub(fdate, interval date_order day) as date2 -- 计算日期差值
from (
-- 计算每个用户每天的登录日期,并分配一个顺序号
select distinct user_id,
fdate,
row_number() over (partition by user_id order by fdate) as date_order -- 分配顺序号
from tb_dau
where fdate between '2023-01-01' and '2023-01-31' -- 限定日期范围
) as t
) as t2
group by user_id, date2 -- 按用户和日期差值分组
) as date3
group by user_id; -- 按用户分组