2017-05-31 65 views
-1

我正在使用SQL Server 2014.我的表有两列。第一列数据类型是datetime,第二个数据类型是nvarchar,包含两种类型的数据,失败和成功。这里我提供了一个示例数据:如何获取时间总和

 
Column 1    | Column 2 
------------------------+-------------- 
2017-05-25 05:30:36.950 | Success 
2017-05-25 06:00:37.117 | Success 
2017-05-25 06:30:37.077 | Success 
2017-05-26 03:00:37.227 | Fail 
2017-05-26 03:30:45.143 | Fail 
2017-05-26 04:00:36.793 | Success 
2017-05-26 04:30:36.957 | Success 

如何获得成功行总数和失败行总数的时间。例如,正如您在上面的示例数据中看到的那样,我需要一个可以计算成功行1小时30分钟和失败行30分钟的查询。

+0

其SQL数据库和请张贴预期的结果 – maSTAShuFu

+0

请邮寄预期与实际结果的文本,也表明你的查询尝试 – TheGameiswar

+0

@maSTAShuFu,我更新了我的问题的文字。 –

回答

0

如果我理解正确,这就是你需要的。

DECLARE @SampleData AS TABLE 
(
    Column1 datetime, 
    Column2 varchar(20) 
) 

INSERT INTO @SampleData (Column1,Column2) 
VALUES 
('2017-05-25 05:30:36.950', 'Success'), 
('2017-05-25 06:00:37.117', 'Success'), 
('2017-05-25 06:30:37.077', 'Success'), 
('2017-05-26 03:00:37.227', 'Fail'), 
('2017-05-26 03:30:45.143', 'Fail'), 
('2017-05-26 04:00:36.793', 'Success'), 
('2017-05-26 04:30:36.957', 'Success') 
;WITH temp AS 
(
    SELECT *, 
      lag(sd.Column2) over(ORDER BY sd.Column1) AS PreviousColumn2, 
      lag(sd.Column1) over(ORDER BY sd.Column1) AS PreviousColumn1 
    FROM @SampleData sd 
) 

SELECT t.Column2,sum(datediff(minute,t.PreviousColumn1, t.Column1)) AS TotalMinutes 
FROM temp t 
WHERE t.Column2 = t.PreviousColumn2 
GROUP BY t.Column2 

返回

Column2 TotalMinutes 
Fail 30 
Success 90 

参考:LAG Window function

+0

非常感谢。这正是我想要的。大。 –