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 ;