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

连续:

  1. 连接表获取新用户的登录信息
  2. groupby用户,给每个用户的登录时间排序得到组内排序
  3. 使用日期减去排序,如果日期是连续的则减去排序值后结果相同
  4. group by diff_date 将结果相同的

连续主要要点:

有一列是绝对连续的,有另一列必须单调递增,不能与前一行相等。此时只有另一列连续1递增才可能与前一行的结果相同。