Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mysql Calcular diferença de tempo entre timestamps no mesmo campo?


Você pode se juntar à tabela, algo assim funciona no seu caso:
SELECT 
*
FROM
yourTable a
INNER JOIN yourTable b ON a.ID = b.ID + 1
WHERE TIMESTAMPDIFF(second, a.timestamp, b.timestamp) > 60

Mas isso pode ficar feio quando você tem lacunas na sua coluna de ID. E especialmente pode ficar feio (em termos de desempenho (quando você não tem bons índices na mesa)) quando você tem *muitos De dados.

Então, sugiro usar consultas um pouco mais avançadas usando variáveis. Sem a necessidade de unir a tabela a si mesma, isso normalmente é executado muito rápido:
SELECT * FROM (
SELECT
yt.*,
TIMESTAMPDIFF(second, @prevTS, `timestamp`) AS timedifference,
@prevTS:=yt.`timestamp`
FROM
yourTable yt
, (SELECT @prevTS:=(SELECT MIN(`timestamp`) FROM yourTable)) vars
ORDER BY ID
)subquery_alias
WHERE timedifference > 65

Para melhorar ainda mais esta consulta para exibir as duas linhas onde a diferença de tempo é muito grande não deve ser um problema :) Quando você tiver problemas sérios, sinta-se à vontade para perguntar.