题解 | #查询连续登陆的用户#
查询连续登陆的用户
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排序