题解 | 查询连续登陆的用户
查询连续登陆的用户
https://www.nowcoder.com/practice/9944210610ec417e94140ac09512a3f5
思路:
一张注册表,一张登录表,所求为至少连续登录三天的新注册用户。
1.数据处理:由于题目说明不考虑同一天多次登录记录的情况,因此无需进行数据去重。对log_time进行处理,使用substr截取log_time的年月日信息。
2.求连续类问题,可使用row_number开窗函数,开出一列行号,再用登录日期减行号,若结果相同则为连续登录。
3.使用count求出连续登录天数,并过滤出大于等于3的user_id。
(注意:题目要求为新注册用户,因此在最开始需要过滤出老用户,增加一句where user_id in (select user_id from register_tb))
select
user_id
from(select
user_id,
count(*) as cont_day
from(select
user_id,
log_date,
date_add(log_date, interval -row_num day) as date_flag
from (select
user_id,
substr(log_time, 1, 10) as log_date,
row_number() over(partition by user_id order by log_time) as row_num
from login_tb
where user_id in (select user_id from register_tb)
group by user_id, log_time
order by user_id asc) t1
)t2
group by user_id, date_flag
)t3
where cont_day >= 3