结构化思维:①先用窗口函数分别选出第二快、第二慢的行以及相应的答题时间;②将两表连接后再与e_i表连接,用以对比duration。代码如下: select rk1.exam_id, duration, release_time from # 第一步:选出各个试卷答题时间第二快的行,用到row_number排序 (select exam_id, a from (select exam_id, timestampdiff(second,start_time,submit_time) a, row_number()over(partition by exam_id order by timestampdiff(second,start_time,submit_time)) r1 from exam_record where submit_time is not null) as tb1 where r1=2) as rk1 # 第三步:第二快、第二慢的行进行连接 left join # 第二步:选出各个试卷答题时间第二慢的行,用到row_number排序 (select exam_id, a from (select exam_id, timestampdiff(second,start_time,submit_time) a, row_number()over(partition by exam_id order by timestampdiff(second,start_time,submit_time) desc) r2 from exam_record where submit_time is not null) as tb2 where r2=2) as rk2 using(exam_id) # 第四步:再与examination_info连接,用来对比duration left join examination_info using(exam_id) where rk2.a-rk1.a>duration*30 order by rk1.exam_id desc