题解 |
某乎问答最大连续回答问题天数大于等于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 ;
查看9道真题和解析

