Pour chaque démarrage, utilisez une requête pour obtenir l'heure de fin suivante. Ensuite, il suffit de calculer la différence. La logique ressemble à ceci :
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
Cela suppose que vos colonnes de date et d'heure sont stockées à l'aide des types de base de données appropriés (date
et time
). Si vous les stockez comme autre chose, vous devrez compliquer inutilement la logique pour les convertir aux formats internes.