平均值mysql的时差

时间:2009-08-05 04:00:06

标签: mysql

是否有函数可以在我的sql中找到标准时间格式的平均时差。

4 个答案:

答案 0 :(得分:20)

您可以使用timestampdiff查找两次之间的差异。

我不确定你的“平均”是什么意思。整个桌子的平均值?一行的平均值?

如果是表格或行的子集:

select
    avg(timestampdiff(SECOND, startTimestamp, endTimestamp)) as avgdiff
from
    table

avg函数与任何其他聚合函数一样,并将响应group by。例如:

select
    col1,
    avg(timestampdiff(SECOND, startTimestamp, endTimestamp)) as avgdiff
from
    table
group by col1

这将为您提供col1的每个不同值的平均差异。

希望这能让你指向正确的方向!

答案 1 :(得分:6)

我喜欢做的是

SELECT count(*), AVG(TIME_TO_SEC(TIMEDIFF(end,start)))
FROM
  table

给出行数......

答案 2 :(得分:5)

为了从mysql获得标准时间格式的实际平均值,我必须转换为秒,平均值,然后转换回来:

SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF(timeA, timeB))))

如果你没有转换为秒,你得到一个奇数十进制表示的分钟,这对我来说没有任何意义。

答案 3 :(得分:0)

我很好奇AVG()是否正确,即COUNT()实际上只是近似值("this value is an approximation")的方式。毕竟,让我们回顾一下平均公式:average = sum / count。因此,知道该计数是准确的对于这个公式来说确实很重要!

在测试了多种组合之后,显然AVG()似乎有效并且是一种很好的方法。您可以计算一下自己是否可以使用...

SELECT
    COUNT(id) AS count,
    AVG(TIMESTAMPDIFF(SECOND, OrigDateTime, LastDateTime)) AS avg_average,
    SUM(TIMESTAMPDIFF(SECOND, OrigDateTime, LastDateTime)) / (select COUNT(id) FROM yourTable) as calculated_average,
    AVG(TIME_TO_SEC(TIMEDIFF(LastDateTime,OrigDateTime))) as timediff_average,
    SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF(LastDateTime, OrigDateTime)))) as date_display
FROM yourTable

样本结果:

             count: 441000
       avg_average: 5045436.4376
calculated_average: 5045436.4376
  timediff_average: 5045436.4376
      date_display: 1401:30:36

似乎很准确!

这将返回:

  • count:计数。
  • avg_average:基于AVG()的平均值。 (感谢Eric对此的回答!)
  • calculated_average:基于SUM()/COUNT()的平均值。
  • timediff_avg:基于TIMEDIFF()的平均值。 (感谢安德鲁对此的回答!)
  • date_display:格式良好的显示版本。 (感谢CS对此的回答!)