Đối với mỗi lần bắt đầu, hãy sử dụng một truy vấn để lấy thời gian kết thúc tiếp theo. Sau đó, chỉ cần tính toán sự khác biệt. Logic là một cái gì đó như thế này:
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
Điều này giả định rằng các cột ngày và giờ của bạn được lưu trữ bằng cách sử dụng các loại cơ sở dữ liệu thích hợp (date
và time
). Nếu bạn đang lưu trữ chúng như một thứ khác, bạn sẽ không cần phải phức tạp hóa logic để chuyển đổi chúng sang các định dạng bên trong.