题解 | 求连续日期#某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级#
某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级
http://www.nowcoder.com/practice/e080f8a685bc4af3b47749ca3310f1fd
题目:请你统计最大连续回答问题的天数大于等于3天的用户及其等级
最大连续天数问题,求解通用思路:
是否连续例如1.11、1.12、1.12、1.13、1.15,序号(dense_rank)分别为1、2、2、3、4,日期数-序号分别为1.10、1.10、1.10、1.10、1.11,可知道日期数-序号相同则为连续的天数
1.按author_id、answer_date去重,然后排上序号
2.做差;按 做差得出的日期 分组 ,having count(*)>=3 筛选出连续日期大于等于3天的用户
3.连接author_tb表
select t2.author_id ,author_level ,days_cnt from ( select author_id ,count(*) days_cnt from ( select author_id ,answer_date ,dense_rank()over(partition by author_id order by answer_date) num ---序号 from answer_tb group by author_id,answer_date ---去重 ) t1 group by author_id,date_add(answer_date,interval -num day)---做差,分组 having count(*)>=3 ) t2 join author_tb t3 on t2.author_id=t3.author_id order by t2.author_id