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

查询连续登陆的用户

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

with t as (
    -- 创建一个CTE(公用表表达式),用于计算每个用户的日期差异
    select 
        user_id,
        date_sub(log_time, interval rk day) as date_diff  -- 计算每个登录日期减去行号的日期差异
    from (
        -- 内部查询:为每个用户的登录记录分配一个行号
        select
            user_id,
            date(log_time) as log_time,  -- 提取日期部分
            row_number() over (partition by user_id order by log_time) as rk  -- 为每个用户按日期分配行号
        from 
            login_tb
        where 
            user_id in (select user_id from register_tb)  -- 仅考虑已注册用户的登录记录
    ) as a
)

-- 主查询:查找具有连续三天或更多天登录的用户
select
    user_id
from 
    t
group by 
    user_id, date_diff  -- 按用户和日期差异分组
having 
    count(date_diff) >= 3  -- 只选择连续登录天数达到3天或以上的组
order by 
    user_id;  -- 按用户ID排序

全部评论

相关推荐

04-14 20:10
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
醉蟀:你不干有的是人干
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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