with t1 as( select user_id,date_format(reg_time,'%Y-%m-%d') as fisrt_time, date_format(log_time,'%Y-%m-%d') as log_time1, row_number() over(partition by user_id order by log_time) as rnk from register_tb join login_tb using(user_id) ), t2 as( select user_id,date_sub(log_time1,interval rnk day) as dt_line from t1 ), t3 as( select user_id,dt_line,count(1) as continuous_date from t2 group by user_id,dt_line ) select user_id from t3 where continuous_date>=3
连续:
- 连接表获取新用户的登录信息
- groupby用户,给每个用户的登录时间排序得到组内排序
- 使用日期减去排序,如果日期是连续的则减去排序值后结果相同
- group by diff_date 将结果相同的
连续主要要点:
有一列是绝对连续的,有另一列必须单调递增,不能与前一行相等。此时只有另一列连续1递增才可能与前一行的结果相同。