WITH T_HEADER AS ( SELECT 'S20180601' 관리번호, '20180101' 처리일자, 50 발생금액, 50 처리금액 FROM DUAL UNION ALL SELECT 'S20180602', '20180103', 36, 0 FROM DUAL UNION ALL SELECT 'S20180603', '20180104', 51, 21 FROM DUAL UNION ALL SELECT 'S20180604', '20180115', 36, 24 FROM DUAL UNION ALL SELECT 'S20180605', '20180117', 5, 15 FROM DUAL ) , T_DETAIL AS ( SELECT 'S20180601' 관리번호, 1 순번, '20180109' 처리일자, 5 처리금액 FROM DUAL UNION ALL SELECT 'S20180601', 2 , '20180110', 10 FROM DUAL UNION ALL SELECT 'S20180601', 3 , '20180120', 10 FROM DUAL UNION ALL SELECT 'S20180601', 4 , '20180125', 25 FROM DUAL UNION ALL SELECT 'S20180603', 1 , '20180110', 21 FROM DUAL UNION ALL SELECT 'S20180604', 1 , '20180120', 24 FROM DUAL UNION ALL SELECT 'S20180605', 1 , '20180123', 15 FROM DUAL ) SELECT H.관리번호 AS 관리번호 , MAX(H.발생금액) AS 발생금액 , SUM(NVL(D.처리금액,0)) AS 처리금액합계 , MAX(H.발생금액) - SUM(NVL(D.처리금액,0)) AS 잔액 FROM T_HEADER H LEFT OUTER JOIN (SELECT 관리번호, SUM(처리금액) 처리금액 FROM T_DETAIL WHERE 처리일자 <= '20180115' GROUP BY 관리번호) D ON H.관리번호 = D.관리번호 GROUP BY H.관리번호
관리번호 S20180601에 대해서 현재 처리완료가 되었는데 특정시점에 미처리된 정보를 조회하려고 합니다.
처리시 Header에 처리금액을 저장해둘 예정이라 최종자료를 기준으로 검색하면 Header만 검색하니 속도문제가 없을것 같은데
특정시점 20180115을 지정해서 검색하는 경우 Detail을 사용해서 최초자료부터 20180115까지 합계를 구해서 검색을 해봤습니다.
근데 시간이 지나서 5~10년치 자료를 검색하면 너무 느려질것 같아서 속도를 개선할 방법을 찾고 있는데 좋은 방법이 떠오르지 않습니다.
사소한것도 좋으니 조언부탁드립니다.
특정일 이전 처리된 정보 조회가 부담스럽다면?
특정일 이후 미처리된 정보 조회로 바꾸세요.
- 변경전 : h.발생금액 - d.처리금액(특정일 이전 처리금액 합계)
- 변경후 : h.발생금액 - h.처리금액 + d.미처리금액(특정일 이후 처리금액 합계)
SELECT H.관리번호 , H.발생금액 , NVL(D.처리금액, 0) AS 처리금액합계 -- , H.발생금액 - NVL(D.처리금액, 0) AS 잔액 , H.발생금액 - H.처리금액 + NVL(D.처리금액, 0) AS 잔액 FROM T_HEADER H LEFT OUTER JOIN (SELECT 관리번호 , SUM(처리금액) 처리금액 FROM T_DETAIL -- WHERE 처리일자 <= '20180115' WHERE 처리일자 > '20180115' GROUP BY 관리번호 ) D ON H.관리번호 = D.관리번호 ;
SELECT H.관리번호 , H.발생금액 , NVL(H.처리금액 - NVL(D.처리금액, 0), 0) AS 처리금액합계 , H.발생금액 - H.처리금액 + NVL(D.처리금액, 0) AS 잔액 FROM T_HEADER H LEFT OUTER JOIN (SELECT 관리번호 , SUM(처리금액) 처리금액 FROM T_DETAIL WHERE 처리일자 > '20180115' GROUP BY 관리번호 ) D ON H.관리번호 = D.관리번호
오호호 엄청납니다.
전체 자료를 조회하는 부담이 사라졌네요.
알려주신 개념으로 수정했더니 처리금액합계까지 원하는 형태로 잘 나오네요.
감사합니다.