我有一个查询:其中我必须以Days:Hours:min:sec格式计算时差
Declare @t table (ID int, starttime datetime,EndTime Datetime)
Insert into @t values (1,'2019-11-16 09:39:04.000','2019-11-16 13:43:40.000')
Insert into @t values (1,'2019-11-16 16:49:42.000','2019-11-18 18:02:58.000')
select convert(varchar(550),DateDiff(day, starttime, EndTime)%3600)+'D : '+convert(varchar(5),DateDiff(s, starttime, EndTime)/3600%24)+'H : '+convert(varchar(5),DateDiff (s,starttime, EndTime)%3600/60)+'M : '+convert(varchar(5),(DateDiff(s, starttime, EndTime)%60)) +'S' as Duration
from @t
输出:
Duration
0D : 4H : 4M : 36S
2D : 1H : 13M : 16S
我的问题是,如何计算两行的总和?
我想要的输出是:
Duration
2D : 5H : 17M : 52S
答案 0 :(得分:4)
找到第二个并执行聚合的差异:
declare @seconds int
select @seconds = sum(datediff(second, starttime, EndTime))
from @t
select convert(varchar(255), (@seconds / 86400)) + 'D:' +
convert(varchar(255), ((@seconds % 86400) /3600)) + 'H:'+
convert(varchar(255), (((@seconds % 86400) % 3600) / 60)) + 'M:'+
convert(varchar(255), (((@seconds % 86400) % 3600) % 60)) + 'S' as Duration
答案 1 :(得分:0)
似乎可以汇总然后计算出值:
WITH Sums AS(
SELECT ID,
SUM(DATEDIFF(SECOND, starttime, EndTime)) Diff
FROM @t
GROUP BY ID) --Assumed GROUP BY
SELECT *,
Diff%60 AS Seconds,
Diff / 60 % 60 AS [Minutes],
Diff / 60 / 60 % 24 AS Hours,
Diff / 60 / 60 / 24 AS Days
FROM Sums;
我将其放在单独的列中,因为它可能更容易用于表示层