在SQL Server 2012
中,我有一个名为Stages
的数据库表,其中包含3列:
我试图找出每个阶段之间通常需要多长时间。 IE阶段2通常需要3天才能完成。这可能吗?是否可以跳过周末?
任何SQL都会有所帮助!
谢谢
答案 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