select user_id from (select user_id,log_time,row_number()over(partition by user_id order by log_time) as n     from login_tb) as t join register_tb using(user_id) group by user_id,date_sub(date(log_time),interval t.n day) having count(user_id)>=3 order by user_id 问题关键:天数连续 方法: 1.row_number()over(partition by user_id order by log_time) as n  先给表格按照user_id分类,并按照时间顺序给每个用户的登录时间排序,得到序号n 2.date_sub(date(log_time),interval t.n day) date_sub计算出每个登录时间减去其在该用户的登录时间排序里面序号值的天数得出的日期 即date(log_time ) - n day (例如: 登陆时间是2024-12-13,排序是3,那这个函数计算得出的日期就是2024-12-10 登陆时间是2024-12-12,排序是2,那这个函数计算得出的日期就是2024-12-10 登陆时间是2024-12-11,排序是1,那这个函数计算得出的日期就是2024-12-10) 3.having count(user_id)>=3 将登陆日期log_time 和date_sub()计算后得到的日期比较,并计算比较结果相同的个数,即为连续的天数。用这个条件就可筛选出连续登录大于等于三天的用户 date_sub(date(log_time),interval t.n day)
1

相关推荐

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