Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie finde ich den durchschnittlichen Zeitunterschied zwischen Zeilen in einer Tabelle?

Wenn Ihre Tabelle t und Ihre Timestamp-Spalte ts ist und Sie die Antwort in Sekunden wollen:

SELECT TIMESTAMPDIFF(SECOND, MIN(ts), MAX(ts) ) 
       /
       (COUNT(DISTINCT(ts)) -1) 
FROM t

Dies wird für große Tabellen meilenweit schneller sein, da es keinen n-Quadrat-JOIN gibt

Dies verwendet einen niedlichen mathematischen Trick, der bei diesem Problem hilft. Ignorieren Sie das Problem der Duplikate für den Moment. Die durchschnittliche Zeitdifferenz zwischen aufeinanderfolgenden Zeilen ist die Differenz zwischen dem ersten Zeitstempel und dem letzten Zeitstempel, dividiert durch die Anzahl der Zeilen -1.

Beweis:Der durchschnittliche Abstand zwischen aufeinanderfolgenden Reihen ist die Summe der Abstände zwischen aufeinanderfolgenden Reihen dividiert durch die Anzahl aufeinanderfolgender Reihen. Aber die Summe der Differenz zwischen aufeinanderfolgenden Zeilen ist nur der Abstand zwischen der ersten Zeile und der letzten Zeile (vorausgesetzt, sie sind nach Zeitstempel sortiert). Und die Anzahl der aufeinanderfolgenden Zeilen ist die Gesamtzahl der Zeilen -1.

Dann konditionieren wir einfach, dass die Zeitstempel unterschiedlich sind.