题解 | #某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级#

某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级

http://www.nowcoder.com/practice/e080f8a685bc4af3b47749ca3310f1fd

首先我们要了解如何去判断连续天数,如果是连续的日期,那么日期-日期对应的行数,所求出的日期是一样的值,基于这个可以找出
连续3天回答问题的用户,
select answer_date,author_id,
                dense_rank()over(partition by author_id order by answer_date) as cnt
        from answer_tb
        group by answer_date,author_id
然后将其与问答创作者信息表author_tb连接即可,完整代码如下
select t2.author_id,author_level,t2.day_cnt
from 
    (select author_id,count(*) day_cnt
    from 
        (select answer_date,author_id,
                dense_rank()over(partition by author_id order by answer_date) as cnt
        from answer_tb
        group by answer_date,author_id
        ) t1
    group by author_id,date_sub(answer_date,interval cnt day)
    having count(*)>=3
    ) t2
join author_tb
on t2.author_id=author_tb.author_id
order by t2.author_id;

全部评论
还是有问题,题目问的是最大连续登陆天数,你这把所有连续登录大于等于3天的都输出了,days_cnt还要再取一个最大值
7 回复 分享
发布于 2022-02-19 13:20
假设题目重的days_cnt指的是最大连续日期,则代码:select author_id, author_level, max(days_cnt_fake) days_cnt from (select author_id , count(distinct answer_date) days_cnt_fake from (select author_id, answer_date , dense_rank()over(partition by author_id order by answer_date) rk from answer_tb) t1 group by author_id, date_sub(answer_date,interval rk day) having days_cnt_fake >=3) t2 join author_tb using(author_id) group by author_id, author_level
1 回复 分享
发布于 2022-12-11 23:10 广东
没去重
1 回复 分享
发布于 2022-08-31 15:31 广东
group by author_id,date_sub(answer_date,interval cnt day) having count(*)>=3 这段有问题吧,要是这个用户在同一天回答了很多次,即使不连续,count(*)也会>3,所以t1表要去重
点赞 回复 分享
发布于 2022-09-03 13:45 北京
dense_rank()的话,11-1为1那 date_sub(answer_date,interval cnt day)岂不是,11-1日往前推1日变成10.31了嘛
点赞 回复 分享
发布于 2022-04-19 14:25
没看懂, group by author_id,date_sub(answer_date,interval cnt day)可以怎么体现你上面说的 :‘如果是连续的日期,那么日期-日期对应的行数,所求出的日期是一样的值’
点赞 回复 分享
发布于 2022-04-19 14:17

相关推荐

09-14 17:23
门头沟学院
故事和酒66:所以说副业很重要,程序员干到40岁,再怎么也赚300万了,吃吃利息也够活下去
点赞 评论 收藏
分享
评论
14
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务