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