如何计算SQL中间隔的平均时间?
我有一个SQL表,在该表中,我需要计算每个事务后的平均时间: 数据如下所示:如何计算SQL中间隔的平均时间?,sql,datetime,reporting-services,ssis,average,Sql,Datetime,Reporting Services,Ssis,Average,我有一个SQL表,在该表中,我需要计算每个事务后的平均时间: 数据如下所示: Tran1 07/09/2011 09:09:07 - CUSTOMER1 Tran2 07/09/2011 09:30:46 - CUSTOMER1 Tran3 07/09/2011 11:27:01 - CUSTOMER2 Tran4 07/09/2011 11:29:22 - CUSTOMER2 Tran5 07/09/2011 13:23:48 - CUSTOMER1 Tran6 08/09
Tran1 07/09/2011 09:09:07 - CUSTOMER1
Tran2 07/09/2011 09:30:46 - CUSTOMER1
Tran3 07/09/2011 11:27:01 - CUSTOMER2
Tran4 07/09/2011 11:29:22 - CUSTOMER2
Tran5 07/09/2011 13:23:48 - CUSTOMER1
Tran6 08/09/2011 14:21:29 - CUSTOMER3
Tran7 08/09/2011 14:25:23 - CUSTOMER3
Tran8 10/09/2011 13:28:57 - CUSTOMER1
Tran9 10/09/2011 13:30:21 - CUSTOMER1
Tran10 10/09/2011 13:49:13 - CUSTOMER4
该表为事务表,共有三列:-
ID=UniqueID,TimeStamp=DataTime,CustomerId=UniqueID
所以如果我传入一个参数DateTime。。比如说“2011年9月10日”
我试图达到的结果是
日期:2011年10月9日平均队列时间:3min2Secs-对于exmaple假设您的表名为MyTable,它是否真的命名为Transaction!?您希望以分钟为单位计算差异:
SELECT CustomerID ,
SUM(timeSinceLastTransaction) / COUNT(*)
FROM ( SELECT * ,
DATEDIFF(MINUTE,
( SELECT TOP 1
t2.DataTime
FROM MyTable t2
WHERE t2.DataTime < t1.DataTime
AND t2.CustomerId = t1.CustomerId
ORDER BY t2.DataTime DESC
),
t1.DataTime
) AS timeSinceLastTransaction
FROM MyTable t1
) AS IndividualTimes
这是一个相关子查询。像这样的查询未经测试
select t.customerID, TIMESTAMPDIFF(SECOND, MIN(t.timestamp), MAX(t.timestamp) ) / (COUNT(DISTINCT(t.timestamp)) -1) as AverageTime
from Transaction_Table T
group by T.customerID
将在几秒钟内给出结果。请参阅,以获得更好的解释针对 查询SQL Server数据库版本 b支持空值
select t.customerID,
Case When COUNT(DISTINCT(t.timestamp)) < = 1 THEN 0
ELSE DATEDIFF(SECOND,MIN(t.timestamp),MAX(t.timestamp))
/(COUNT(DISTINCT(t.timestamp)) -1) as AverageTime
from Transaction_Table T
group by T.customerID
注意:数据应按时间戳排序,否则会得到错误的结果。链接中用于计算连续值/范围平均值的巧妙技巧。我比我更喜欢这种方法。更少的人性化,更友好的资源。如何解释零除法?使用case语句:case when countID=0然后0 else Datediff endThank我尝试了此操作,但没有收到此错误消息-Datediff函数需要3个参数。编辑以修复:添加了t1.DataTime作为Datediff的第三个参数。谢谢。这对我现在起作用了。然而我试图找出每个客户交易之间的平均时间,我需要做的是传入给定的日期,因此如果传入“10/9/2011”,它应该查询表并返回平均队列时间。返回的结果应该如下所示。。日期:2011年10月9日平均排队时间:3min2Secs.CustomerID看起来不是很独特…这3分钟-2秒是如何计算的?