sql >> Database teknologi >  >> RDS >> Mysql

Hvordan finder man den gennemsnitlige tidsforskel mellem rækker i en tabel?

Hvis din tabel er t, og din tidsstempelkolonne er ts, og du vil have svaret på få sekunder:

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

Dette vil være miles hurtigere for store borde, da det ikke har nogen n-kvadrat JOIN

Dette bruger et sødt matematisk trick, som hjælper med dette problem. Ignorer problemet med dubletter for øjeblikket. Den gennemsnitlige tidsforskel mellem på hinanden følgende rækker er forskellen mellem det første tidsstempel og det sidste tidsstempel, divideret med antallet af rækker -1.

Bevis:Den gennemsnitlige afstand mellem på hinanden følgende rækker er summen af ​​afstanden mellem på hinanden følgende rækker, divideret med antallet af på hinanden følgende rækker. Men summen af ​​forskellen mellem på hinanden følgende rækker er blot afstanden mellem første række og sidste række (forudsat at de er sorteret efter tidsstempel). Og antallet af på hinanden følgende rækker er det samlede antal rækker -1.

Så betinger vi bare tidsstemplerne til at være distinkte.



  1. Indstil tegnsættet og samlingen af ​​en database i MariaDB

  2. Hvordan henter man unikke rækker baseret på kolonneværdikombinationer?

  3. Find det refererede tabelnavn ved hjælp af tabel-, felt- og skemanavn

  4. Streng til tidsstempel i MySQL