sql >> Database >  >> RDS >> Mysql

Hoe vind je het gemiddelde tijdsverschil tussen rijen in een tabel?

Als uw tabel t is, en uw tijdstempelkolom is ts, en u wilt het antwoord in seconden:

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

Dit zal mijlen sneller zijn voor grote tafels omdat het geen n-kwadraat JOIN heeft

Dit maakt gebruik van een leuke wiskundige truc die helpt bij dit probleem. Negeer het probleem van duplicaten voor het moment. Het gemiddelde tijdsverschil tussen opeenvolgende rijen is het verschil tussen de eerste tijdstempel en de laatste tijdstempel, gedeeld door het aantal rijen -1.

Bewijs:De gemiddelde afstand tussen opeenvolgende rijen is de som van de afstand tussen opeenvolgende rijen, gedeeld door het aantal opeenvolgende rijen. Maar de som van het verschil tussen opeenvolgende rijen is slechts de afstand tussen de eerste rij en de laatste rij (ervan uitgaande dat ze zijn gesorteerd op tijdstempel). En het aantal opeenvolgende rijen is het totale aantal rijen -1.

Dan conditioneren we de tijdstempels om duidelijk te zijn.



  1. Hoe PII te vinden en te maskeren in Elasticsearch

  2. Waarom heeft de Oracle IN-clausule een limiet van 1000 alleen voor statische gegevens?

  3. PostgreSQL-functieaanroep

  4. Samengestelde sleutel definiëren met Auto Increment in MySQL