select uid, count(score) as exam_complete_cnt from (select uid, start_time, submit_time, score, dense_rank() over(partition by uid order by date_format(start_time, '%Y%m') desc) as ranking from exam_record) t1 where t1.ranking <= 3 group by uid having count(start_time) = count(submit_time) order by exam_complete_cnt desc, uid desc ;
这道题刚开始做的时候,我是先进行拆解,先查出学生近三个月的的uid,开始做题时间,提交时间,以及成绩,用窗口函数按照uid进行分组,按照月份的降序进行分组,这样就能得出每个学生最近做题的时间。然后将这个时间排序作为一个t1表供查询,在t1外面套一个查询,进行count计算每个学生完成试卷的数量(exam_complete_cnt)。

京公网安备 11010502036488号