题解 | #最大连续回答问题天数大于等于3天的用户#
某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级
https://www.nowcoder.com/practice/e080f8a685bc4af3b47749ca3310f1fd
关键点
与前面连续打卡天数的关键点一致——
每个用户连续的若干天里,日期-排序=同一日期,不妨称其为参考日期
- q1对每个用户的回答日期进行排名,并得到参考日期
- q2得到每个用户不同参考日期的连续天数
- q3取每个用户的最大连续天数
最后与创作者信息表相连得其等级。
例如:若一用户的回答日期为11.1,11.2,11.4,11.5,11.6,11.8,11.9,则 - q1得参考日期为11.1,11.4,11.8
- q2得各连续天数分别为2,3,2
- q3的该用户的最大连续天数为3
易错点
因存在同一用户同一天重复作答的情况,应使用以下搭配: - dense_rank()over()+后去重count(distinct())
- q1就对用户、日期双重去重+row_number/dense_rank等任意排序方式
举例如下:
完整代码如下select q3.author_id,author_level,days_cnt from (select author_id,max(cnt) as days_cnt from (select author_id,ref_date,count(distinct answer_date) as cnt from (select *, dense_rank() over (partition by author_id order by answer_date) as dk, date_sub(answer_date,interval dense_rank() over (partition by author_id order by answer_date) day) as ref_date from answer_tb) as q1 group by author_id,ref_date) as q2 group by author_id) as q3 join author_tb as atb on q3.author_id=atb.author_id where days_cnt>=3 order by author_id