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

查询连续登陆的用户

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

select
    user_id
from
    (
        select
            *,
            date_sub(dt, interval rk day) as tmp_dt
        from
            (
                select
                    *,
                    row_number() over (
                        partition by
                            user_id
                        order by
                            dt
                    ) as rk
                from
                    (
                        select
                            user_id,
                            date(log_time) as dt
                        from
                            login_tb
                        where
                            user_id in (
                                select
                                    user_id
                                from
                                    register_tb
                            )
                        group by
                            1,
                            2
                    ) t1
            ) t2
    ) t3
group by
    1,
    tmp_dt
having
    count(1) >= 3
order by
    1

整体思路--按照账号id聚合分组---日期升序排序---用row_number给予序号---日期减去这个序号----有n条记录代表连续登录n天

1.首先筛选出新注册用户id及其登录日期dt,再group by去重作为t1表

2.使用row_number排序函数按照dt升序排名,t1表加入一列排序,序号为rk,作为t2

3.t2表中每一行日期减去 其序号rk的天数,得到第一天,若该账号连续登录3天则会产生3条日期为初始日期相同的记录,

全部评论

相关推荐

求求要我吧:你教育经历放在下面干什么,而且27届还是28届啊()另外看你简历有两面,通常来说投递运营岗位一面简历就够了。另外个人总结要写也放在简历最下面,然后你奖项那里是2019年的哇哈哈,那你究竟投递的是社招还是实习?实习的话你是第几届是肯定要写出来的,社招的话你这个工作经历又太短太花了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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