是否有函数可以在我的sql中找到标准时间格式的平均时差。
答案 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对此的回答!)