题解 | 最长连续登录天数
最长连续登录天数
https://www.nowcoder.com/practice/cb8bc687046e4d32ad38de62c48ad79b
with tt1 as(
select
fdate,
user_id,
row_number() over (PARTITION BY user_id order by fdate) as rn
FROM
tb_dau
),
tt2 as(
select
fdate,
user_id,
DATE_SUB(fdate,INTERVAL rn DAY) as grp
FROM
tt1)
select
user_id,
MAX(consec_days) as max_consec_days
from(
select
tt2.user_id,
count(*) as consec_days
from tt2
group by user_id,grp) AS conse
group by user_id
①排序和编号:窗口函数row_number(),对每个用户的登录日期进行排序,并为每个日期分配一个序号
②识别连续序列:DATE_SUB(fdate, INTERVAL rn DAY) AS grp,通过日期与序号的运算,将连续日期映射到同一个分组标识(grp),从而实现对连续序列的精准分组。
③计算连续天数:配合GROUP BY计算最长连续天数
查看11道真题和解析