题解 | #查询连续登陆的用户#
查询连续登陆的用户
https://www.nowcoder.com/practice/9944210610ec417e94140ac09512a3f5
SELECT user_id FROM ( SELECT user_id, DATE( log_time ) AS day1, LEAD( DATE( log_time ), 1 ) OVER ( PARTITION BY user_id ORDER BY log_time ) AS day2, LEAD( DATE( log_time ), 2 ) OVER ( PARTITION BY user_id ORDER BY log_time ) AS day3 FROM login_tb ) AS time WHERE DATEDIFF( day2, day1 ) = 1 AND DATEDIFF( day3, day2 ) = 1 AND user_id IN ( SELECT user_id FROM register_tb ) ORDER BY user_id;
这个子查询解题思路真的清晰明了
注意:
1.要用date()函数去除时间,也就是小时分钟等,只选择日期;
2.计算时间差时要用order by对时间进行排序,并根据user_id分组,计算方式就异常明显了,不繁琐;
3.筛选符合题目条件的连续时间列,并让两个user_id相等(这里用的不是连接,用in判断,我觉得非常好)
4.最后可能不用order by排序也是对的,但是题目要求了,并且考虑实际情况,也需要排序