Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como encontrar a diferença de tempo média entre as linhas de uma tabela?


Se sua tabela for t, e sua coluna de carimbo de data/hora for ts, e você quiser a resposta em segundos:
SELECT TIMESTAMPDIFF(SECOND, MIN(ts), MAX(ts) ) 
       /
       (COUNT(DISTINCT(ts)) -1) 
FROM t

Isso será muito mais rápido para mesas grandes, pois não possui JOIN n-quadrado

Isso usa um truque matemático fofo que ajuda com esse problema. Ignore o problema de duplicatas por enquanto. A diferença de tempo média entre linhas consecutivas é a diferença entre o primeiro timestamp e o último timestamp, dividido pelo número de linhas -1.

Prova:A distância média entre linhas consecutivas é a soma da distância entre linhas consecutivas, dividida pelo número de linhas consecutivas. Mas a soma da diferença entre linhas consecutivas é apenas a distância entre a primeira e a última linha (supondo que elas sejam classificadas por timestamp). E o número de linhas consecutivas é o número total de linhas -1.

Em seguida, apenas condicionamos os timestamps a serem distintos.