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) t
where rk <= 3 
group by uid
having count(score) = count(start_time)

order by exam_complete_cnt desc,uid desc

dense_rank的应用,先把最近三个月的所有信息都找出来,然后降序排列选出最近三个月的记录,按照uid分组并筛选出作答记录完整的结果输出