select uid,count(submit_time)  as exam_complete_cnt
from (
            select uid,start_time,submit_time,
                   dense_rank()over(partition by uid order by date_format(start_time,'%Y%m') desc) as rn
            from exam_record
       ) t
where rn <= 3 
group by uid
having count(start_time) = count(submit_time)
order by exam_complete_cnt desc,uid desc