sql面试题 - 求出连续登录7天的用户/用户数

连续性问题,如:

  1. 求出连续登录7天的用户/用户数
  2. 求出连续充电次数大于等于12次的用户数
  3. 求出3年获得冠军的选手
  4. ......

通用的解法:

  1. 数据去重处理。如求连续7天登录的用户数,则一个用户一天只保留一条数据
  2. 开窗函数。找到分区主键,然后按照时间进行排序求得rank
  3. 用时间-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

衍生问题:

  1. 求每个用户最大连续登录天数
做出rank, date_parm后

select  user_id, max(rank)
from input 
group by user_id
posted @ 2023-07-20 19:20  ttttttian  阅读(1031)  评论(0编辑  收藏  举报