-- 查询每个用户在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;  -- 按用户分组