select uid,count(score) as exam_complete_cnt from( select *, dense_rank()over(partition by uid order by date_format(start_time,'%Y%m') desc) as rk from exam_record) a where rk <= 3 group by uid having count(start_time) = count(submit_time) order by exam_complete_cnt desc,uid desc
要用dense_rank()而不是row_unmber(),因为最近三个月的记录相同月份也要记录在内。