连续回答问题天数,连续签到天数等等,固定思路:使用窗口函数,根据用户分组,日期进行排序构造新列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