Eri*_*ric 20
你可以timestampdiff用来找到两次之间的差异.
不过,我不确定你的"平均"是什么意思.整个桌子的平均值?连续平均?
如果是表格或行的子集:
select
avg(timestampdiff(SECOND, startTimestamp, endTimestamp)) as avgdiff
from
table
Run Code Online (Sandbox Code Playgroud)
该avg函数与任何其他聚合函数一样,并将响应group by.例如:
select
col1,
avg(timestampdiff(SECOND, startTimestamp, endTimestamp)) as avgdiff
from
table
group by col1
Run Code Online (Sandbox Code Playgroud)
这将为您提供每个不同值的平均差异col1.
希望这能让你指向正确的方向!
我喜欢做的是
SELECT count(*), AVG(TIME_TO_SEC(TIMEDIFF(end,start)))
FROM
table
Run Code Online (Sandbox Code Playgroud)
给出行数......
小智 5
为了从mysql获得标准时间格式的实际平均值,我必须转换为秒,平均值,然后转换回:
SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF(timeA, timeB))))
Run Code Online (Sandbox Code Playgroud)
如果你没有转换为秒,你得到一个奇数十进制表示的分钟,这对我来说没有任何意义(对我而言).
我很好奇它是否AVG()准确,COUNT()实际上只是近似该值的方式(“这个值是一个近似值”)。毕竟,让我们回顾一下平均公式: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
Run Code Online (Sandbox Code Playgroud)
结果示例:
count: 441000
avg_average: 5045436.4376
calculated_average: 5045436.4376
timediff_average: 5045436.4376
date_display: 1401:30:36
Run Code Online (Sandbox Code Playgroud)
看来还蛮准确的!
这将返回:
count: 计数。avg_average:基于 的平均值AVG()。(感谢 Eric 对此的回答!)calculated_average:基于 的平均值SUM()/COUNT()。timediff_avg:基于 的平均值TIMEDIFF()。(感谢安德鲁对此的回答!)date_display:格式精美的显示版本。(感谢CS对此的回答!)