Gebruik voor elke start een query om de volgende eindtijd te krijgen. Bereken dan gewoon het verschil. De logica is ongeveer als volgt:
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
Dit veronderstelt dat uw datum- en tijdkolommen zijn opgeslagen met de juiste databasetypes (date
en time
). Als je ze als iets anders opslaat, moet je de logica onnodig ingewikkeld maken om ze naar de interne formaten te converteren.