with tab as(
select *,ROW_NUMBER()over(partition by author_id order by rk3) as days
from(
    SELECT answer_date,author_id
           ,date_sub(answer_date,INTERVAL rank()over(order by answer_date,author_id) day) as rk3
#         ,rank()over(order by answer_date,author_id) as rk2
   from(
       select answer_date,author_id
       FROM answer_tb
       group by answer_date,author_id   #去重
        )ta
    )tb   #还原签到起始日期
)#起始签到日期相同计数(连续签到计数)

select author_id,author_level,max(days) as days_cnt
from author_tb as at1
     join tab using(author_id)
where days>=3
group by author_id,author_level