MySQL:获得时差的平均值?

时间:2010-04-27 14:50:53

标签: mysql datetime average

我有一个名为Sessions的表,其中包含两个日期时间列:开始和结束。

对于每一天(YYYY-MM-DD),可以有许多不同的开始和结束时间(HH:ii:ss)。我需要找到这些开始和结束时间之间所有差异的每日平均值。

几行的例子是:

start: 2010-04-10 12:30:00 end: 2010-04-10 12:30:50
start: 2010-04-10 13:20:00 end: 2010-04-10 13:21:00
start: 2010-04-10 14:10:00 end: 2010-04-10 14:15:00
start: 2010-04-10 15:45:00 end: 2010-04-10 15:45:05
start: 2010-05-10 09:12:00 end: 2010-05-10 09:13:12
...

2010-04-10的时差(以秒为单位)为:

50
60
300
5

2010-04-10的平均值为103.75秒。我希望我的查询返回类似的内容:

day: 2010-04-10 ave: 103.75
day: 2010-05-10 ave: 72
...

我可以按开始日期分组时间差,但我不确定如何获得平均值。我尝试使用AVG函数,但我认为它只能直接用于列值(而不是另一个聚合函数的结果)。

这就是我所拥有的:

SELECT
    TIME_TO_SEC(TIMEDIFF(end,start)) AS timediff
FROM
    Sessions
GROUP BY
    DATE(start)

有没有办法获得每个开始日期组的timediff平均值?我是聚合函数的新手,所以也许我误解了一些东西。如果您知道备用解决方案,请分享。

我总是可以专门做它并在PHP中手动计算平均值,但我想知道是否有办法在MySQL中执行此操作,因此我可以避免运行一堆循环。

感谢。

2 个答案:

答案 0 :(得分:18)

SELECT  DATE(start) AS startdate, AVG(TIME_TO_SEC(TIMEDIFF(end,start))) AS timediff
FROM    Sessions
GROUP BY
        startdate

答案 1 :(得分:1)

SELECT  DATE(start) AS startdate, SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF((end,start))))) AS avgtimediff
FROM    Sessions
GROUP BY DATE(start)

这将给出前一个答案给出数字时的平均值。