select b.user_id from (select a.user_id,count(a.primary_date) as continue_num from (select l.user_id,date_sub(date(l.log_time),interval row_number() over (partition by l.user_id order by date(l.log_time)) day)as primary_date from login_tb l join register_tb as r on l.user_id = r.user_id where date(r.reg_time)='2022-02-08')a group by a.user_id,primary_date)b where b.continue_num>=3 order by b.user_id
连续最大问题的思路:
- a层子查询:用date_sub函数内嵌row_number函数(原理https://www.bilibili.com/video/BV16a411G7fK/?spm_id_from=333.337.search-card.all.click&vd_source=01bee36d06fa0efc4887211e7d7c2dbd)构建一个基准日期,当基准日期出现1次就是连续1天,2次就是连续2天,以此类推
注意:1)要用date函数对字段进行日期格式化;2)要限制注册时间为2022-02-08,否则结果就会出现1003,我推测1003是老用户,而本题要求的是新用户
- b层子查询:计算每个新用户的连续天数
- 最外层:查找每个新用户的连续天数不少于3天的用户id