MySQL:如何获取时间差的平均值?

17

我有一个名为Sessions的表,其中包含两个日期时间列:start和end。

每天(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个回答

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

是的,就是这样,我一发布问题就意识到了。感觉有点傻。我无法让它工作的原因是我在做AVG(timediff),我猜你需要直接传递表达式,不能使用别名。谢谢。 - nebs

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

这将给出平均时间,作为先前答案给定的数字。

它会用12:00 AM的形式给出答案。我该如何进一步解决? - rohetoric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接