如何在以下查询中进行 avg(time(4)) :
select top 10 avg(e.Duration) from TimeTable e
我收到以下错误:
操作数数据类型 time 对 avg 运算符无效。
持续时间是类型 time(4) 例如:
Duration
-------------
00:00:10.0000
如何在以下查询中进行 avg(time(4)) :
select top 10 avg(e.Duration) from TimeTable e
我收到以下错误:
操作数数据类型 time 对 avg 运算符无效。
持续时间是类型 time(4) 例如:
Duration
-------------
00:00:10.0000
您可以使用DateDiff( ms, '00:00:00', e.Duration )
将时间转换为整数毫秒数。将其用于您的聚合,然后将结果转换回来,例如Cast( DateAdd( ms, 1234, '00:00:00' ) as Time )
.
改进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
除了 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'
好吧,这似乎time
是该方法的无效类型avg()
。请参阅此处以获取有效数据类型的列表。
此外,您似乎需要一组值,这将否定top 10
您当前查询的需要。