Mysql
 sql >> Database >  >> RDS >> Mysql

Calcolo della differenza di tempo in MySQL ma tenendo conto degli eventi

Per ogni inizio, usa una query per ottenere l'ora di fine successiva. Quindi, calcola solo la differenza. La logica è qualcosa del genere:

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

Ciò presuppone che le colonne di data e ora siano archiviate utilizzando i tipi di database appropriati (date e time ). Se li stai archiviando come qualcos'altro, dovrai complicare inutilmente la logica per convertirli nei formati interni.