Verwenden Sie für jeden Start eine Abfrage, um die nächste Endzeit abzurufen. Dann berechnen Sie einfach die Differenz. Die Logik ist in etwa so:
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
Dies setzt voraus, dass Ihre Datums- und Zeitspalten mit den richtigen Datenbanktypen gespeichert werden (date
und time
). Wenn Sie sie als etwas anderes speichern, müssen Sie die Logik unnötig verkomplizieren, um sie in die internen Formate zu konvertieren.