Untuk setiap awal, gunakan kueri untuk mendapatkan waktu berakhir berikutnya. Kemudian, hitung saja selisihnya. Logikanya kira-kira seperti ini:
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
Ini mengasumsikan bahwa kolom tanggal dan waktu Anda disimpan menggunakan tipe database yang tepat (date
dan time
). Jika Anda menyimpannya sebagai sesuatu yang lain, Anda tidak perlu memperumit logika untuk mengonversinya ke format internal.