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

Mysql ¿Calcular la diferencia de tiempo entre las marcas de tiempo en el mismo campo?

Puede unirse a la mesa, algo como esto funciona en su caso:

SELECT 
*
FROM
yourTable a
INNER JOIN yourTable b ON a.ID = b.ID + 1
WHERE TIMESTAMPDIFF(second, a.timestamp, b.timestamp) > 60

Pero esto puede ponerse feo cuando tiene espacios en blanco en su columna de ID. Y especialmente puede ponerse feo (en términos de rendimiento (cuando no tienes buenos índices en la tabla)) cuando tienes *muchos de datos.

Entonces, sugeriría usar consultas un poco más avanzadas usando variables. Sin la necesidad de unir la tabla a sí misma, normalmente se ejecuta bastante 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 mejorar aún más esta consulta para mostrar las dos filas donde la diferencia de tiempo es demasiado grande no debería ser un problema :) Sin embargo, cuando tenga problemas serios, no dude en preguntar.