쿼리문 질문 드립니다. 0 1 1,185

by 고재원 [SQL Query] [2023.05.25 16:10:03]


00.jpg (106,862Bytes)

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

 

아래와 같이 추가된 다음 일자부터 값이 재계산되어 변경할 수 있을까요?

해당 기간안에  매번 재 계산하여 중간에 추가된 내용이 있다고 해도

파일첨부 내용과 같이 재계산.

 

 

 

 

by 마농 [2023.05.25 17:33:48]
-- 테스트용 테이블 생성 --
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
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입