如何计算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

我有一个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/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秒是如何计算的?