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

查询连续登陆的用户

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

-- 又是连续登录问题
-- 时间戳都要换成date
--

with t1 as (
    -- 1. 去重:每个用户每天只保留一条记录
    select distinct
        user_id,
        date(log_time) as date
    from login_tb
),
t2 as (
    -- 2. 开窗排序:按用户分组,按日期排序
    select
    *,
    row_number() over(partition by user_id order by date) as rn
    from t1
),
t3 as (
    -- 3. 日期减排名 = 分组标记(连续登录的标记相同)
    select
    *,
        date_sub(date, interval rn day) as group_flag
    from t2
),

t4 as (
    -- 4. 按用户和分组标记统计连续天数
    select
        user_id,
        group_flag,
        count(*) as consecutive_days
    from t3
    group by user_id, group_flag
)

-- 5. 取每个用户的最大连续天数
select
    t4.user_id
from t4
left join register_tb  r on  r.user_id =t4.user_id
where consecutive_days>=3 and date(reg_time) >='2022-02-08' 
group by user_id
order by user_id;

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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