Thursday, March 5, 2015

time different excluding overlap period

If the OP is on an earlier version SQL Server, this version should be good all the way back the SQL Server 2005. ;)



;WITH t AS (SELECT *, ROW_NUMBER() OVER (ORDER BY t.startTime) AS rn FROM @tbl AS t)
SELECT
t1.id,
t1.startTime,
t1.endTime,
COALESCE(DATEDIFF(hh,
CASE WHEN t1.startTime > t2.endTime THEN t1.startTime ELSE t2.endTime END,
CASE WHEN t1.endTime > t2.endTime THEN t1.endTime ELSE t2.endTime END
), DATEDIFF(hh, t1.startTime, t1.endTime)) AS Diff
FROM t AS t1
LEFT JOIN t AS t2
ON t1.rn = t2.rn +1
ORDER BY
t1.id





Jason Long


No comments:

Post a Comment