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

查询连续登陆的用户

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

select
    user_id
from
    (
        select distinct
            user_id,
            count(*) over (
                partition by
                    user_id,
                    num
            ) num2
        from
            (
                select
                    user_id,
                    date1 - rank() over (
                        partition by
                            user_id
                        order by
                            date1
                    ) num
                from
                    (
                        select distinct
                            user_id,
                            date (log_time) date1
                        from
                            login_tb
                        where
                            user_id in (
                                select distinct
                                    user_id
                                from
                                    register_tb
                            )
                    ) as t1
            ) as t2
    ) as t3
where
    num2 >= 3

搜了下这是一道比较经典的SQL类型题

这道题的步骤:

1.在用户登录信息表中筛选出用户和登录日期并去重,其中用户要是注册过的

2.我们按照用户登录时间使用窗口函数进行排名,并用用户登录日期减去排名,可以发现如果是连续登录的话,减法得到的结果相同

3.使用窗口函数得到按照用户id,减法结果分组后得到的个数

4.筛选个数>=3的用户id,并进行去重

全部评论

相关推荐

MinJerous:虽然我一直说 计算机不怎么卡学历 但是至少得一本
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 14:00
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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