T-SQL计算平均时间(T-SQL calculating average time)

2019-08-17 11:34发布

我有一个计算平均时间的问题。 这样的话:我有多个行,每行中存在时间格式的数据,所以我需要计算所有行的平均时间和行数相乘,但我当然有问题的数据格式,因为我需要乘时间整数

有人可以帮我一些建议吗? 日Thnx下面是一些数据:

times
00:00:00.7400000
00:00:01.1870000
00:00:00.6430000
00:00:00.6100000
00:00:12.9570000
00:00:01.1000000
00:00:00.7400000
00:00:00.5300000
00:00:00.6330000
00:00:01.6000000
00:00:02.6200000
00:00:01.0300000
00:00:01.9630000
00:00:00.9800000
00:00:01.0170000
00:00:00.7600000
00:00:00.7130000
00:00:00.9730000
00:00:01.0000000
00:00:01.0530000
00:00:02.9400000
00:00:00.8200000
00:00:00.8400000
00:00:01.1800000
00:01:25.8230000
00:00:01.0000000
00:00:00.9700000
00:00:01.2930000
00:00:01.3270000
00:00:13.5570000
00:00:19.3170000
00:00:58.2730000
00:00:01.6870000
00:00:18.7570000
00:00:42.8570000
00:01:12.3770000
00:00:01.2170000
00:00:09.9470000
00:00:01.4730000
00:00:00.9030000
00:00:01.0070000
00:00:01.1100000
00:00:01.6270000
00:00:05.0570000
00:00:00.6570000
00:00:00.7900000
00:00:03.2930000
00:00:00.8600000
00:00:01.0330000
00:00:00.9300000
00:00:00.8730000
00:00:00.9600000
00:00:00.8070000
NULL

所以从这个数据需要的平均时间或/和数据的总和

Answer 1:

你应该能够使用类似以下内容:

select 
  cast(cast(avg(cast(CAST(times as datetime) as float)) as datetime) as time) AvgTime,
  cast(cast(sum(cast(CAST(times as datetime) as float)) as datetime) as time) TotalTime
from yourtable;

请参阅SQL拨弄演示 。

这个转换times数据的datetime ,然后一个float这样你就可以得到avg / sum ,然后将转换为值回datetime ,最后一个time



Answer 2:

您可以通过执行一串日期运算的做到这一点:

DECLARE @t TABLE(x TIME);

INSERT @t VALUES('00:01:30'),('00:02:25'),('00:03:25');

SELECT CONVERT(TIME, DATEADD(SECOND, AVG(DATEDIFF(SECOND, 0, x)), 0)) FROM @t;

但是,你应该做的是不使用TIME存储的间隔/持续时间。 TIME是指存储在某个时间点(并打破了,如果你需要存储超过24小时,例如)。 相反,你应该存储的开始和结束时间的事件。 您可以随时计算的持续时间(平均持续时间),如果你有两个端点。



Answer 3:

假设你已经存储在持续时间字段,你可以尝试DateDiff函数类似下面得到持续时间的总和(或总时间)。 只需使用平均的平均水平。

演示: http://sqlfiddle.com/#!3/f8c09/2

select sum(datediff(millisecond,0,mytime)) TotalTime
from t


Answer 4:

这可能是在该网站及类似情况下非常有用。

下面将日期/时间转换为分钟数从午夜开始。 换句话说时间表示为整数。 您可以在这做一个平均,然后再转换回时间。

declare @dt datetime = GETDATE();
select DATEDIFF(minute, dateadd(dd, datediff(dd, 0, @dt), 0), @dt);
--DATEDIFF(minute, [date without time i.e. midnight], [date/time of interest])


文章来源: T-SQL calculating average time