select
exam_id,
duration,
release_time
from
(
select
t1.exam_id,
e.duration,
e.release_time,
sum(
case
when t1.rank_desc = 2 then t1.time_diff
when t1.rank_asc = 2 then - t1.time_diff
else 0
end
) as sum_time
from
(
select
exam_id,
timestampdiff (minute, start_time, submit_time) as time_diff,
row_number() over (
partition by
exam_id
order by
timestampdiff (minute, start_time, submit_time) desc
) rank_desc,
row_number() over (
partition by
exam_id
order by
timestampdiff (minute, start_time, submit_time) asc
) rank_asc
from
exam_record
where
submit_time is not null
) t1
left join examination_info e on t1.exam_id = e.exam_id
group by
t1.exam_id
) t2
where
sum_time >= duration / 2
order by
exam_id desc