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

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

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

连续回答问题天数,连续签到天数等等,固定思路:使用窗口函数,根据用户分组,日期进行排序构造新列a,同时对原数据进行去重,每天每个用户只要保留一条记录,然后时间列和a列相减得到新列b,如此一来只要是连续答题,或签到。那么相减后得到的值相同。最后再根据用户id和b列分组计数就可以得到连续答题的天数了。

select t1.author_id,
    any_value(at.author_level) author_level,
    count(1) days_cnt
from (
select answer_date,
    author_id,
	# 这里我用的是rank(),同时通过对answer_date, author_id进行分组,达到去重(即一天可能回答多题)效果。
	# 参考了一下其他答案,用dense_rank()即出现一天回答多题排序是相同的。但是仍然是需要去重的。即数据表中
	# 一个用户一天只能存在一条答题记录
    date_sub(answer_date, interval rank() over(partition by author_id order by answer_date) day) as rk1
from answer_tb
group by answer_date, author_id
) t1 
join author_tb at on t1.author_id=at.author_id
group by t1.author_id, t1.rk1
having count(1) >= 3
order by t1.author_id asc

全部评论
问题:这个题解并不严谨,当一个用户第一次连续3天答题,中断了几天之后,又连续4天答题,此时两条记录都会被筛选出来。所以需要再嵌套一个查询,查询用户的最大登录天数。
点赞 回复
分享
发布于 2023-07-29 15:32 广东
牛啊 (经验+3)
点赞 回复
分享
发布于 2023-08-01 16:06 广东
联易融
校招火热招聘中
官网直投

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务