思路分析:
(1)求出每个user_id对应的create_date明细数据并去重
(2)开窗求user_id分组下按照create_date的排序号row_num
(3)使用create_date与row_num求差值作为日期days字段,如果连续登录那么差值相同,
(4)按照user_id与days分组计数求数量大于3的user_id就是连续登录用户
代码实现:
sql
select
user_id
from(
select
user_id,
date_sub(create_date, row_num) as days
from (
select
user_id,
create_date,
ROW_NUMBER() over(partition by user_id order by create_date) as row_num
from (
select
user_id,
create_date
from order_info
GROUP BY user_id,
create_date
) t0
) t1
) t2
group by user_id,
days
having count(*) >= 3;