找出阶段之间的平均时间差

时间:2018-06-07 13:37:44

标签: sql sql-server

SQL Server 2012中,我有一个名为Stages的数据库表,其中包含3列:

  1. 的AccountID
  2. StageNum
  3. 开始时间
  4. 我试图找出每个阶段之间通常需要多长时间。 IE阶段2通常需要3天才能完成。这可能吗?是否可以跳过周末?

    任何SQL都会有所帮助!

    谢谢

2 个答案:

答案 0 :(得分:3)

最简单的方法是:

select ( datediff(minute, min(StartTime), max(StartTime)) /
         nullif(60.0 * (count(*) - 1), 0)
       ) as avg_hours
from t; 

nullif()阻止除以零。这个想法很简单。 。 。取总时间并除以阶段数小于1。

答案 1 :(得分:2)

我会尝试使用LEAD和AVG,如下所示:

CREATE TABLE Tab1(
  AccountID INT, StageNum INT, StartTime DATETIME
)

INSERT INTO Tab1 VALUES(1, 1, '2018-01-01 07:00:00.000'), (1, 2, '2018-01-03 12:54:00.000'), (1, 3, '2018-02-01 12:00:00.000')
INSERT INTO Tab1 VALUES(2, 1, '2018-03-01 00:00:00.000'), (2, 2, '2018-04-03 12:54:00.000'), (2, 3, '2018-08-01 12:00:00.000')


WITH cte AS(
SELECT *
      ,LEAD(StartTime) OVER (PARTITION BY t.AccountID ORDER BY t.StageNum) NextStart
      ,DATEDIFF(MINUTE, StartTime, LEAD(StartTime) OVER (PARTITION BY t.AccountID ORDER BY t.StageNum))/60.0 TimeSpanHours
  FROM Tab1 t
)
SELECT AccountID, AVG(TimeSpanHours) AvgTimeSpanHours
  FROM cte
  GROUP BY AccountID
  ORDER BY AccountID