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递增才可能与前一行的结果相同。

京公网安备 11010502036488号