select t2.uid,count(t2.month_submit) as exam_complete_cnt 
from
(SELECT t1.uid,t1.month_submit from(
select  uid,date_format(start_time,'%Y-%m') as month_start,
dense_rank() over(partition by uid order by date_format(start_time,'%Y-%m') desc) as rank_date,
DATE_FORMAT(submit_time,'%Y-%m') as month_submit from 
exam_record ) t1 
where rank_date <= 3 ) t2 
group by t2.uid having count(*)=count(t2.month_submit) 
order by exam_complete_cnt desc,t2.uid desc