#思路:①先准备一张底表tb1,两表连接后将去重后的日期与日期排序做差,形成一列用于分组计算的日期dt; #②基于tb1,用uid和dt分组并计算连续天数,选出3天以上的部分,形成tb2; #③基于tb2,用uid分组选出连签天数最大值部分即可。 with tb1 as (select distinct author_id, answer_date, author_level, date_sub(answer_date, interval (dense_rank()over(partition by author_id order by answer_date)) day) dt from answer_tb left join author_tb using(author_id)) select author_id, author_level, max(num) from( select author_id, author_level, count(dt) num from tb1 group by author_id, author_level, dt having num>=3) as tb2 group by author_id, author_level order by author_id