2013-05-06 64 views
7

我有一个带有时间字段的SQL数据库。如何返回一个SQL时间字段的平均值

的运行时间字段包含02:06:24, 00:01:12等等

我试图返回本场的平均在HH:MM:SS使用格式;

SELECT AVG(runtime) 
FROM `result` 

这将返回8312.2342729307我认为是但是当转换成分,这是不正确的秒的平均值。

我能够以正确的格式返回MIN和MAX运行时,但无法获得AVG,我该怎么做?

失败,有无论如何选择中间元素作为中位数平均使用?

+0

目前还不清楚您所使用的数据库:MySQL的唯一?还是另一个? – Jocelyn 2013-05-06 14:04:19

+0

我不确定老实说,它的托管在http://www.numyspace.co.uk/phpmyadmin – 2013-05-06 14:18:41

+0

你认为两点和五点的平均值应该是多少?两点和五点的*总和*应该是多少? – 2013-05-06 14:28:36

回答

2

不能使用AVG()函数针对DATETIME/TIME

我铸造DATETIME到DECIMAL(18,6),这似乎得到一个合理的(+ - 几毫秒)精确的结果。

SELECT cast(CAST(AVG(CAST(runtime AS DECIMAL(18, 6))) AS DATETIME) as time) 
FROM dbo.result; 
+0

它返回一行但是这是NULL – 2013-05-06 14:21:27

+0

快速测试表明'AVG()'将'01:30:00'视为'13000',即使在严格模式下: - ?如果有人能找到说明他应该在这里发布的手册页。 – 2013-05-06 14:52:56

3

因此,通过图示的方式...

SELECT SEC_TO_TIME((TIME_TO_SEC('02:06:24')+TIME_TO_SEC('00:01:12'))/2) x; 
+----------+ 
| x  | 
+----------+ 
| 01:03:48 | 
+----------+ 
+0

SELECT SEC_TO_TIME((TIME_TO_SEC('22:06:24')+ TIME_TO_SEC('00:01:12'))/ 2)x; 给我11:03:48.0000 ...这是错误的结果。正确的结果应该是23:XX ... – 2017-10-31 11:31:41

+0

@ApoorvaShah Your's与最初提出的问题不同。另外XX不是有效的时间。 – Strawberry 2017-10-31 12:02:16

+0

是XX表示第二个......我还没有计算确切的平均值。 – 2017-10-31 12:17:15