아래와 같이 데이터가 있는데
시간시간 종료시간을 체크해서 중복구간을 제외한 시작시간 종료시간 차이의 합을 구하고 싶습니다.
예를 들어
0~19 = 19
0~6 = 0
0~19 = 0
0~3 = 0
0~3 = 0
11~24 = 5( 19까지 중복되는 구간)
203~212 = 9
그래서 총합이 33이 나오게 하고 싶습니다.
시작시간 종료시간
0 19
0 6
0 19
0 3
0 3
11 24
203 212
제가 생각한 로직은 스칼라 반환함수를 써서
하나하나 체크해서 중복도지 않은 구간의 값을 반환하는 방식으로 할려고 했는데
데이터가 많아 비효율이라는 생각이 들어서 혹시 그냥 쿼리로 해결할수 있을까요?
;WITH AAA AS
(
SELECT 0 AS ST, 19 AS EN UNION ALL
SELECT 0 AS ST, 6 AS EN UNION ALL
SELECT 0 AS ST, 19 AS EN UNION ALL
SELECT 0 AS ST, 3 AS EN UNION ALL
SELECT 0 AS ST, 3 AS EN UNION ALL
SELECT 11 AS ST, 24 AS EN UNION ALL
SELECT 203 AS ST, 212
)
--SELECT * FROM AAA
SELECT DISTINCT(B.NUMBER)--, COUNT(DISTINCT(B.NUMBER))
FROM AAA AS A
INNER JOIN MASTER.DBO.SPT_VALUES AS B ON B.NUMBER BETWEEN A.ST AND A.EN
WHERE B.TYPE = 'P'