Per ogni inizio, usa una query per ottenere l'ora di fine successiva. Quindi, calcola solo la differenza. La logica è qualcosa del genere:
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
Ciò presuppone che le colonne di data e ora siano archiviate utilizzando i tipi di database appropriati (date
e time
). Se li stai archiviando come qualcos'altro, dovrai complicare inutilmente la logica per convertirli nei formati interni.