题解 | #连续回答问题天数大于等于3天的用户及其对应等级#
某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级
https://www.nowcoder.com/practice/e080f8a685bc4af3b47749ca3310f1fd
解题思路
① 记录去重-删去用户存在一天多次回答产生的冗余记录
② 按时间排序-对每个用户按照答题时间生成序列字段
③ 计算起始时间-利用答题时间与序列字段做差
④ 按用户聚合-以用户聚合统计不同连续区间的频数
⑤ 筛选最大连续区间-以用户聚合筛选最大频数
select t3.author_id,author_level,max(cnt)as days_cnt -- 5)筛选最大值 from( select author_id,tag,author_level,count(1) as cnt -- 4)按着用户聚合,计算连续区间的频数 from( select*,date_sub(answer_date, interval rn day) as tag -- 3)用登录时间-编号,生成tag from( select distinct answer_tb.author_id,author_level,answer_date, -- 1)记录去重,删去用户存在一天多次登录的记录 row_number()over(partition by author_id order by answer_date) as rn-- 2)对每个用户按照答题时间生成编号 from author_tb left join answer_tb on author_tb.author_id=answer_tb.author_id) as t1) as t2 group by author_id,tag,author_level) as t3 group by 1 having days_cnt>=3;