with temp as( select t1.exam_id ,duration ,release_time ,timestampdiff(minute,start_time,submit_time) diff ,row_number() over(partition by exam_id order by timestampdiff(second,start_time,submit_time) desc) diff_rank1 ,row_number() over(partition by exam_id order by timestampdiff(second,start_time,submit_time) asc) diff_rank2 from exam_record t1 left join examination_info t2 on t1.exam_id = t2.exam_id where submit_time is not null ) select exam_id,duration,release_time from( select exam_id ,duration ,release_time ,sum(case when diff_rank1 = 2 then diff when diff_rank2 = 2 then -diff else 0 end) sub from temp group by exam_id)a where sub >= duration/2 order by exam_id desc