题解 | 查询连续登陆的用户
查询连续登陆的用户
https://www.nowcoder.com/practice/9944210610ec417e94140ac09512a3f5
select a.user_id
from(
select b.user_id,
date1,
date_sub(date1,interval row_number()over(partition by user_id order by date1) day ) date2
---第二步子查询,用日期减去窗口函数的结果得到date2
from(
select lt.user_id,
substr(log_time,1,10) date1
from login_tb as lt
inner join register_tb as rt on lt.user_id=rt.user_id
where substr(rt.reg_time,1,10) = '2022-02-08'
group by user_id,substr(lt.log_time,1,10)---第一步查询,对user_id和日期去重
) b
) a
group by user_id,date2
having count(*) >=3
order by user_id
---第三步对user_id,date2先去重分组,用having筛选出大于3的
where--行过滤,未分组
having--组过滤,已分组
1,date_sub是sql中对日期做减法的函数,用法是date_sub(日期,interval 需要减的数 day)
2.substr函数 SUBSTR(string, start_position, length),用于截取字符串子串的函数,能从一个字符串里按指定位置和长度提取部分内容,常用于处理日期、文本等字符串数据
