解题思路
- 用户每天登录的次数可能不止一次,因此先将用户每天登录的日期去重;
- 然后将数据按用户ID分组,按照登录日期(yyyy-mm-dd)排序rn;
- 计算登录日期-rn(第二步的排序值) as diff_date – 用户连续登录的情况下,每次相减的结果都相同;
- 按照user_id, diff_date 分组,统计count(*)>N的个数,即得到最终的结果。
代码实现
select
user_id
from(
select
user_id, login_date,
date_sub(login_date, rn) diff_date -- 第三步
from(
select
user_id, login_date,
row_number() over(partition by user_id order by login_date) rn -- 第二步
from(select distinct user_id, login_date from login_info)t -- 第一步
)tt
)ttt
group by user_id, diff_date
having count(*)>N