题解 | 查询连续登陆的用户

查询连续登陆的用户

https://www.nowcoder.com/practice/9944210610ec417e94140ac09512a3f5

思路:
一张注册表,一张登录表,所求为至少连续登录三天的新注册用户。
1.数据处理:由于题目说明不考虑同一天多次登录记录的情况,因此无需进行数据去重。对log_time进行处理,使用substr截取log_time的年月日信息。
2.求连续类问题,可使用row_number开窗函数,开出一列行号,再用登录日期减行号,若结果相同则为连续登录。
3.使用count求出连续登录天数,并过滤出大于等于3的user_id。
(注意:题目要求为新注册用户,因此在最开始需要过滤出老用户,增加一句where user_id in (select user_id from register_tb))
select
    user_id
from(select
        user_id,
        count(*) as cont_day
    from(select
            user_id,
            log_date,
            date_add(log_date, interval -row_num day) as date_flag
        from (select
                    user_id,
                    substr(log_time, 1, 10) as log_date,
                    row_number() over(partition by user_id order by log_time) as row_num
                from login_tb
                where user_id in (select user_id from register_tb)
                group by user_id, log_time
                order by user_id asc) t1
    )t2
    group by user_id, date_flag
)t3
where cont_day >= 3

全部评论

相关推荐

不愿透露姓名的神秘牛友
04-22 13:08
Data_Seven:真不知道这些企业哪来的成就感
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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