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 |
아래와 같이 추가된 다음 일자부터 값이 재계산되어 변경할 수 있을까요?
해당 기간안에 매번 재 계산하여 중간에 추가된 내용이 있다고 해도
파일첨부 내용과 같이 재계산.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | -- 테스트용 테이블 생성 -- 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 ; |