题解 | #最大连续回答问题天数大于等于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等任意排序方式
    举例如下:
    对上面的例子,搭配1:
    完整代码如下
    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
全部评论

相关推荐

徐新高:号已经废了 建议重开一个账号投简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务