题解 | #某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级#
某乎问答最大连续回答问题天数大于等于3天的用户及其对应等级
http://www.nowcoder.com/practice/e080f8a685bc4af3b47749ca3310f1fd
解题思路: 反向推导, 正向执行
反向推导
- 获取最大连续回答问题天数不小于3天的用户及其对应等级, 需要计算每个用户连续回答问题的天数
- 计算每个用户连续回答问题的天数, 需要定位用户连续回答问题的日期, 再进行统计
正向执行
- 定位每个用户连续回答问题的日期, 可以依据连续回答问题的日期差为1, 以用户为单位, 按照时间排序, 通过当天日期和排序的差, 求得一个连续问答问题的参照日期(连续回答问题日期的前一天)
- 以用户和参照日期为单位, 统计连续回答问题的天数
- 计算每位用户最大连续回答问题天数, 并筛选不小于3天的用户即可
select author_id,
author_level,
max(days) as days_cnt
from (
select author_id,
count(*) over (partition by author_id, tp_dt) as days
from (
select distinct
author_id,
answer_date,
date_sub(answer_date, interval dense_rank() over (partition by author_id order by answer_date) day) as tp_dt
from answer_tb
) as a
) as b
join author_tb using(author_id)
group by author_id,
author_level
having days_cnt >= 3
order by author_id