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