10

如何在以下查询中进行 avg(time(4)) :

  select top 10 avg(e.Duration) from TimeTable e

我收到以下错误:

操作数数据类型 time 对 avg 运算符无效。

持续时间是类型 time(4) 例如:

Duration
-------------
00:00:10.0000
4

4 回答 4

17

您可以使用DateDiff( ms, '00:00:00', e.Duration )将时间转换为整数毫秒数。将其用于您的聚合,然后将结果转换回来,例如Cast( DateAdd( ms, 1234, '00:00:00' ) as Time ).

于 2012-08-03T01:42:56.583 回答
9

改进HABO答案:

select top 10
Cast(DateAdd( ms,avg(DateDiff( ms, '00:00:00', e.Duration)), '00:00:00' )  as time) as 'avg duration' 
from TimeTable e
于 2013-01-30T14:39:43.753 回答
2

除了 HABO 和 Rafi 的答案。

对于我的情况,我不得不将 DATEDIFF 的值转换为 bigint,因为我的值变得太大并导致算术溢出错误。

CAST(DATEADD( ms,AVG(CAST(DATEDIFF( ms, '00:00:00', ISNULL(e.Duration, '00:00:00')) as bigint)), '00:00:00' )  as TIME) as 'avg_time'
于 2018-04-02T20:24:05.753 回答
1

好吧,这似乎time是该方法的无效类型avg()。请参阅此处以获取有效数据类型的列表。

此外,您似乎需要一组值,这将否定top 10您当前查询的需要。

于 2012-08-03T00:57:36.243 回答