with a as(
select
distinct answer_date,
author_id
from
answer_tb
),
b as (
select
answer_date,
author_id,
rank()over(partition by author_id order by answer_date) as rk
from
a
),
c as (
select
date_sub(answer_date,INTERVAL rk day) as new_dt,
author_id
from
b
),
d as (
select
author_id,
new_dt,
count(*) as days
from
c
group by
author_id,
new_dt
),
e as(
select
author_id,
max(days) as days_cnt
from
d
group by
author_id
having
days_cnt>=3
),
f as(
select
e.author_id,
at.author_level,
e.days_cnt
from
e inner join author_tb as at on e.author_id = at.author_id
)
select * from f