Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mysql Calculer la différence de temps entre les horodatages dans le même champ ?

Vous pouvez rejoindre vous-même la table, quelque chose comme ceci fonctionne dans votre cas :

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

Mais cela peut devenir moche lorsque vous avez des lacunes dans votre colonne ID. Et surtout ça peut devenir moche (en termes de performances (quand on n'a pas de bons index sur la table)) quand on en a *beaucoup de données.

Donc, je suggérerais d'utiliser des requêtes un peu plus avancées en utilisant des variables. Sans avoir besoin de joindre la table à elle-même, cela s'exécute généralement assez rapidement :

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
  • le voir fonctionner en direct dans sqlfiddle

Améliorer encore cette requête pour afficher les deux lignes où la différence de temps est trop grande ne devrait pas être un problème :) Lorsque vous rencontrez de sérieux problèmes, n'hésitez pas à demander, cependant.