一尘不染

如何找到表中行之间的平均时间差?

mysql

我有一个存储一些时间戳的mysql数据库。假设表中所有的都是ID和时间戳。时间戳可能重复。

我想查找不重复的连续行之间的平均时间差(按时间)。有没有办法在SQL中做到这一点?


阅读 245

收藏
2020-05-17

共1个答案

一尘不染

如果您的表是t,而您的时间戳列是ts,并且您想在几秒钟内得到答案:

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

对于大型桌子,这将是更快的里程,因为它没有n平方的JOIN

这使用了一个可爱的数学技巧,可以解决该问题。暂时忽略重复的问题。连续行之间的平均时间差是第一个时间戳和最后一个时间戳之间的差,除以行数-1。

证明:连续行之间的平均距离是连续行之间的距离之和,除以连续行的数量。但是,连续行之间的差之和就是第一行和最后一行之间的距离(假设它们按时间戳排序)。并且连续的行数是总行数-1。

然后我们只是将时间戳记设置为不同。

2020-05-17