题解 | 最长连续登录天数

最长连续登录天数

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 列中
  • 全部评论

    相关推荐

    不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
    点赞 评论 收藏
    分享
    不愿透露姓名的神秘牛友
    昨天 17:30
    找实习找着找着就要进入7月了,马上秋招也要开始了,找实习还有意义吗?
    绝迹的星:有面就面, 没面上就当日薪4位数大佬免费培训, 面上了再考虑要不要实习
    点赞 评论 收藏
    分享
    评论
    点赞
    1
    分享

    创作者周榜

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