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

查询连续登陆的用户

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

一、核心思路

使用 ROW_NUMBER() + DATE_SUB 构造“连续组标识”(即“初始日期”),然后按组统计连续天数。

二、正确题解

SELECT DISTINCT user_id
FROM (
    SELECT 
        user_id,
        DATE(log_time) AS log_date,
        ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY DATE(log_time)) AS rn,
        DATE_SUB(DATE(log_time), INTERVAL ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY DATE(log_time)) DAY) AS grp
    FROM login_tb
    WHERE user_id IN (SELECT user_id FROM register_tb)
) t1
GROUP BY user_id, grp
HAVING COUNT(*) >= 3
ORDER BY user_id;

使用 ROW_NUMBER + DATE_SUB 的连续分组法,可以轻松扩展到“连续≥N天”,能解决所有连续日期问题。

全部评论

相关推荐

04-28 15:42
郑州大学 C++
点赞 评论 收藏
分享
04-13 20:21
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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