题解 |
某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级
https://www.nowcoder.com/practice/e080f8a685bc4af3b47749ca3310f1fd
#最大连续回答问题天数大于等于3天的用户及其对应等级#
### 统计最大连续作答问题天数的用户,需要将时间按先后顺序使用排序函数dense_rank()函数计数,相同的日期纪录相同的序号,隔天的日期顺延+1 ,然后使用date_sub(date,interval dn day) 将当前日期时间向前推进对应的dn天,按照这个表达式分组,得到了
相同的 日期表示 连续的日期。然后统计出每个人所对应的连续作答天数的一个基本情况。然后统计最大值。
   select author_id,
          author_level,
          max(continDays) days_cnt 
     from (
   select author_id,
          author_level,
          date_sub(answer_date,interval dn day) dateTime , # date_sub(date,interval n day) 和date_add(date,interval -n day) 都是把当前date日期向前推送n天。
          count(answer_date) continDays 
          #date_sub(answer_date,interval -dn day) dt #若dt相等表示时间连续 
     from (
   select distinct ant.author_id ,
          aut.author_level,
          ant.answer_date ,
          dense_rank() over(partition by ant.author_id,aut.author_level order by ant.answer_date) dn 
     from answer_tb ant join author_tb aut using(author_id) 
      ) A 
     group by author_id,author_level,date_sub(answer_date,interval dn day)   
     ) B 
     group by author_id,author_level
     having days_cnt >= 3 
     order by author_id ; 
查看10道真题和解析

