数据库中行之间的平均时间差

时间:2014-08-11 20:08:22

标签: mysql database

使用MySQL,我有一个跟踪用户访问的表:

USER_ID | TIMESTAMP --------+---------------------- 1 | 2014-08-11 14:37:36 2 | 2014-08-11 12:37:36 3 | 2014-08-07 16:37:36 1 | 2014-07-14 15:34:36 1 | 2014-07-09 14:37:36 2 | 2014-07-03 14:37:36 3 | 2014-05-23 15:37:36 3 | 2014-05-13 12:37:36

时间并不重要,更关注“条目之间的天数

如何通过SQL查询确定条目之间的平均天数?

例如,输出应该类似于:

(输出只是一个样本,不是上面数据表的反映)

USER_ID | AVG TIME (days) --------+---------------------- 1 | 2 2 | 3 3 | 1

1 个答案:

答案 0 :(得分:1)

MySQL没有直接的"从前一行得到的东西"能力。最简单的解决方法是使用变量来存储"之前的"值:

SET last = null;

SELECT user_id, AVG(diff)
FROM (
    SELECT user_id, IF(last IS NULL, 0, timestamp - last) AS diff, @last := timestamp
    FROM yourtable
    ORDER BY user_id, timestamp ASC
) AS foo
GROUP BY user_id

内部查询与上一行"区别开来"计算,外部查询进行平均。