题解 | 最长连续登录天数 | 用的是评论区的解题思路

最长连续登录天数

https://www.nowcoder.com/practice/cb8bc687046e4d32ad38de62c48ad79b?tpId=375&tqId=10737573&sourceUrl=%2Fexam%2Foj

-- 去重处理:确保每个用户每天的登录记录唯一。
with td as(
    select distinct user_id, fdate
    from tb_dau
    where fdate between '2023-01-01' and '2023-01-31'
),
-- 生成序号:为每个用户的登录日期按顺序编号。
td0 as (
    select 
        user_id,
        fdate,
        rank() over (partition by user_id order by fdate) as rn
    from td
),
-- 计算连续组标识:用登录日期减去序号,相同结果的日期属于同一连续组。
td1 as (
    select 
    user_id,
    date_sub(fdate,interval rn day) as new_date
    from td0
),
-- 统计每组连续天数:按用户和连续组分组,计算每组的连续天数。
td2 as(
    select user_id,
        new_date,
        count(*) as max_consec_days
    from td1
    group by user_id,
        new_date
)
-- 取最大值:对每个用户,取所有连续组中的最大天数。
select 
    user_id,
    max(max_consec_days) as max_consec_days
from td2
group by user_id
order by user_id;

全部评论

相关推荐

昨天 23:48
西北大学 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务