题解 | #连续回答问题天数大于等于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;

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务