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

查询连续登陆的用户

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

with a as
(
    select 
    r.user_id,
		date(r.reg_time) reg_time,
		date(l.log_time) log_time,
		ROW_NUMBER() over (partition by r.user_id order by log_time) as rn
    from register_tb r
		left join login_tb l
		on r.user_id = l.user_id
),
b as 
(
	select 
	user_id,
	DATE_sub(log_time,interval rn day) n_day
	from a
)
select user_id
from b
group by user_id,n_day
having count(n_day) > 2

步骤 1:标记用户每次登录的顺序

  • 操作:将用户的注册信息(register_tb)和登录信息(login_tb)关联,为每个用户的每次登录分配一个序号。
  • 实现:使用窗口函数 ROW_NUMBER() 按用户分组(PARTITION BY user_id),并按注册时间排序(ORDER BY reg_time),生成序号 rn(第 1 次登录、第 2 次登录...)。

步骤 2:计算 “预期登录日期”

  • 操作:对每个用户的每次登录日期 log_time,加上对应的序号 rn 天,得到一个新日期 n_day
  • 设计意图:如果用户连续登录,例如第 1 天、第 2 天、第 3 天登录,对应的 n_day 会是相同的值。例如:第 1 天登录:log_time + 1 天第 2 天登录:log_time + 1 天第 3 天登录:log_time + 1 天这些 n_day 完全相同,可用于判断连续性。

步骤 3:筛选连续登录超过 2 天的用户

  • 操作:按用户分组,统计每个用户的相同 n_day 值的出现次数。
  • 判断逻辑:如果某个用户的 n_day 中有至少 3 个相同的值,则认为该用户连续登录了 3 天或更久。最终返回满足条件的用户 ID。#牛客AI配图神器#
#SQL基础#
全部评论

相关推荐

ResourceUt...:楼主有自己的垃圾箱,公司也有自己的人才库
点赞 评论 收藏
分享
迷茫的大四🐶:你这个拿去投央国企吧,投私企包过不了的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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