题解某乎问答最大连续回答问题天数大于等于3天用户及其对应等级
某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级
https://www.nowcoder.com/practice/e080f8a685bc4af3b47749ca3310f1fd
连续回答问题天数,连续签到天数等等,固定思路:使用窗口函数,根据用户分组,日期进行排序构造新列a,同时对原数据进行去重,每天每个用户只要保留一条记录,然后时间列和a列相减得到新列b,如此一来只要是连续答题,或签到。那么相减后得到的值相同。最后再根据用户id和b列分组计数就可以得到连续答题的天数了。
select t1.author_id, any_value(at.author_level) author_level, count(1) days_cnt from ( select answer_date, author_id, # 这里我用的是rank(),同时通过对answer_date, author_id进行分组,达到去重(即一天可能回答多题)效果。 # 参考了一下其他答案,用dense_rank()即出现一天回答多题排序是相同的。但是仍然是需要去重的。即数据表中 # 一个用户一天只能存在一条答题记录 date_sub(answer_date, interval rank() over(partition by author_id order by answer_date) day) as rk1 from answer_tb group by answer_date, author_id ) t1 join author_tb at on t1.author_id=at.author_id group by t1.author_id, t1.rk1 having count(1) >= 3 order by t1.author_id asc