使用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
答案 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
内部查询与上一行"区别开来"计算,外部查询进行平均。