table
| YMD | UN | A | B |
| 20230403 | 고재원 | 40297 | 40307 |
| 20230403 | 고재원 | 40307 | 40317 |
| 20230404 | 고재원 | 40317 | 40327 |
| 20230404 | 고재원 | 40327 | 40337 |
| 20230405 | 고재원 | 40337 | 40347 |
| 20230405 | 고재원 | 40347 | 40357 |
| 20230406 | 고재원 | 40357 | 40367 |
| 20230406 | 고재원 | 40367 | 40377 |
| 20230407 | 고재원 | 40377 | 40387 |
| 20230407 | 고재원 | 40387 | 40397 |
이렇게 조회를 했는데 중간에 값을 추가하는 경우
| 20230405 | 고재원 | 40357 | 40369 |
| 20230405 | 고재원 | 40369 | 40381 |
아래와 같이 추가된 다음 일자부터 값이 재계산되어 변경할 수 있을까요?
해당 기간안에 매번 재 계산하여 중간에 추가된 내용이 있다고 해도
파일첨부 내용과 같이 재계산.
-- 테스트용 테이블 생성 --
CREATE TABLE test9
AS
SELECT '20230403' ymd, '고재원' un, 40297 a, 40307 b FROM dual
UNION ALL SELECT '20230403', '고재원', 40307, 40317 FROM dual
UNION ALL SELECT '20230404', '고재원', 40317, 40327 FROM dual
UNION ALL SELECT '20230404', '고재원', 40327, 40337 FROM dual
UNION ALL SELECT '20230405', '고재원', 40337, 40347 FROM dual
UNION ALL SELECT '20230405', '고재원', 40347, 40357 FROM dual
UNION ALL SELECT '20230406', '고재원', 40357, 40367 FROM dual
UNION ALL SELECT '20230406', '고재원', 40367, 40377 FROM dual
UNION ALL SELECT '20230407', '고재원', 40377, 40387 FROM dual
UNION ALL SELECT '20230407', '고재원', 40387, 40397 FROM dual
;
-- 입력용 테이블 생성 --
CREATE TABLE test9_insert
AS
SELECT * FROM test9
WHERE 1=2
;
-- 추가 데이터 입력 --
INSERT INTO test9_insert VALUES('20230405', '고재원', 40357, 40369);
INSERT INTO test9_insert VALUES('20230405', '고재원', 40369, 40381);
SELECT * FROM test9_insert
;
-- 기존 테이블 갱신 및 추가 자료 입력 --
MERGE INTO test9 t
USING (SELECT un
, MIN(a) a
, MAX(b) - MIN(a) c
FROM test9_insert
GROUP BY un
) s
ON (t.un = s.un)
WHEN MATCHED THEN
UPDATE
SET t.a = t.a + s.c
, t.b = t.b + s.c
WHERE t.a >= s.a
;
INSERT INTO test9
SELECT * FROM test9_insert
;
-- 입력용 테이블 초기화 --
TRUNCATE TABLE test9_insert;
-- 최종 데이터 확인 --
SELECT *
FROM test9
ORDER BY un, a
;