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