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

查询连续登陆的用户

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排序也是对的,但是题目要求了,并且考虑实际情况,也需要排序

全部评论
点赞 回复 分享
发布于 2024-12-12 10:46 辽宁

相关推荐

05-01 22:41
中南大学 Java
点赞 评论 收藏
分享
05-24 14:12
门头沟学院 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-20 14:14
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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