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

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

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

-- 方法一:刚开始的做法,用排序后分组
# with t1 as
# ( -- 先找出需要的字段并去重取出来
# select distinct 
#         a.author_id,
#         answer_date,
#         a.author_level
# #         row_number() over (partition by author_id) rn
# from answer_tb join author_tb a on answer_tb.author_id = a.author_id
# order by author_id,answer_date
# ),t2 as
# ( -- 排序日期求差值
# select
#        t1.*,
#        row_number() over (partition by author_id) rn,
#        date_add(answer_date,Interval - row_number() over (partition by author_id) day ) s_dt
# from t1)
# select -- 按要求找出答案
#        author_id,
#        author_level,
#        count(distinct answer_date) days_cnt
# from t2
# group by author_id, author_level,s_dt
# having days_cnt>=3
# ;
-- 方法二:后来发现直接按level分组就好了
with t1 as
( -- 先找出需要的字段并去重取出来
select distinct
        a.author_id,
        answer_date,
        a.author_level
#         row_number() over (partition by author_id) rn
from answer_tb join author_tb a on answer_tb.author_id = a.author_id
order by author_id,answer_date
),t2 as
( -- 这边可以优化一下,懒得做了,留给有缘人\(^o^)/~
select
       t1.*
#        row_number() over (partition by author_id) rn,
#        date_add(answer_date,Interval - row_number() over (partition by author_id) day ) s_dt
from t1)
select -- -- 按要求找出答案
       author_id,
       author_level,
       count(distinct answer_date) days_cnt
from t2
group by author_id, author_level
having days_cnt>=3
;

全部评论

相关推荐

在看牛客的社畜很积极:身高体重那一行信息去掉,学校那一行的信息放上面,找半天都没找到你是哪个学校什么专业的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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