题解 | 最长连续登录天数

最长连续登录天数

https://www.nowcoder.com/practice/cb8bc687046e4d32ad38de62c48ad79b

with
    t1 as (
        select
            fdate,
            user_id,
            row_number() over (
                partition by
                    user_id
                order by
                    fdate
            ) rk
        from
            tb_dau
    ),
    t2 as (
        select
            user_id,
            fdate,
            date_sub(fdate, interval rk day) as grp
        from
            t1
    )
select
    user_id,
    max(log_days) max_consec_days
from
    (
        select
            user_id,
            count(grp) log_days
        from
            t2
        group by
            user_id,
            grp
    ) temp
group by
    user_id

t1表利用窗口函数row_number给每个用户(partition by 分区)的登录记录按日期排序分配唯一且连续的行号;

t2表计算每个用户登录日期与对应行号差值的日期,如果用户的登录是连续的,那么同一组连续登录日期计算得到的 grp 值是相同的;

  • t2 中选取数据,按照 user_idgrp 进行分组。
  • COUNT(grp):统计每个分组内的记录数量,即每个连续登录组的天数,存储在 log_days 列中
  • 从子查询 temp 中选取数据,按照 user_id 进行分组。
  • MAX(log_days):计算每个用户的最大连续登录天数,存储在 max_consec_days 列中
  • 全部评论

    相关推荐

    下北澤大天使:你是我见过最美的牛客女孩😍
    点赞 评论 收藏
    分享
    06-27 18:53
    门头沟学院 Java
    这样才知道自己不适合搞代码,考公去咯
    码农索隆:好家伙,我这干的挺好,我老妈还劝我考公呢
    点赞 评论 收藏
    分享
    评论
    点赞
    1
    分享

    创作者周榜

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