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