sql >> Base de Datos >  >> RDS >> Mysql

Calculando la diferencia horaria en MySQL pero teniendo en cuenta los eventos

Para cada inicio, use una consulta para obtener la próxima hora de finalización. Luego, solo calcula la diferencia. La lógica es algo así:

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

Esto supone que sus columnas de fecha y hora se almacenan utilizando los tipos de base de datos adecuados (date y time ). Si los está almacenando como algo más, tendrá que complicar innecesariamente la lógica para convertirlos a los formatos internos.