sql面试题 - 求出连续登录7天的用户/用户数
连续性问题,如:
- 求出连续登录7天的用户/用户数
- 求出连续充电次数大于等于12次的用户数
- 求出3年获得冠军的选手
- ......
通用的解法:
- 数据去重处理。如求连续7天登录的用户数,则一个用户一天只保留一条数据
- 开窗函数。找到分区主键,然后按照时间进行排序求得rank
- 用时间-rank,得到一列时间参考列,根据时间参考列进行聚合,即可。
问题:
求出连续登录7天的用户/用户数
拆解:
select count(distinct user_id) as 用户数
from (
select user_id, date, data_sub(date, rank ) as date_parm
from (
select * , row_number() over (partition by user_id order by date ) as rank
from (
select distinct user_id, date from input
)
)
)
where date_parm >= 7
衍生问题:
- 求每个用户最大连续登录天数
做出rank, date_parm后
select user_id, max(rank)
from input
group by user_id