За всяко начало използвайте заявка, за да получите следващия краен час. След това просто изчислете разликата. Логиката е нещо подобно:
select t.*, timestampdiff(second, dt, next_dt)
from (select t.*, addtime(t.date, t.time) as dt,
(select addtime(t2.date, t2.time)
from table t2
where addtime(t2.date, t2.time) > addtime(t.date, t.time) and
status = 'end'
order by addtime(t2.date, t2.time) desc
limit 1
) as next_dt
from table t
where status = 'start'
) t
Това предполага, че вашите колони за дата и час се съхраняват с помощта на правилните типове бази данни (date
и time
). Ако ги съхранявате като нещо друго, ще трябва ненужно да усложнявате логиката, за да ги преобразувате във вътрешните формати.