변경된 컬럼의 값 변경여부 0 5 391

by 제리1 [2022.01.06 17:35:40]


안녕하세요. 질문드립니다.

 

     column1 column2  column3
row1  사과     바나나     오렌지 
row2  사과     딸기      오렌지 

이런 결과 값이 나왔을 때 data2 컬럼이 변경된 걸로 보고 column2가 변경되었다는 표시를 YN 
      column1 column1_YN  column2 column2_YN  column3  column3_YN
row1   사과        N             딸기           Y           오렌지         N

이런식으로 데이터 뽑을 수 있나요?
    

by 마농 [2022.01.06 17:51:33]

두 레코드 간에 연결고리 컬럼이 따로 있는지요? 있어야 합니다.
두 레코드 간에 순차적인 흐름을 알 수 있는 항목이 따로 있는지요? 있어야 합니다.
여러번에 걸쳐서 변경이 되는 경우가 있는지? 있다면? 최종 자료와 직전 자료만 비교하면 되는 거겠죠?
위에 언급한 컬럼에 대한 정보 포함하여 예시자료 보여주세요.
DB 종류 및 버전에 따라 구문이 다를 수 있습니다.
DB 종류 및 버전도 알려주세요.


by 제리1 [2022.01.07 13:27:25]
ID HIST_SEQ CI_ID NAME STATUS
0044 1 H0202 test323 사용
0044 2 H0202 test323 미사용

 

연결고리 컬럼은 ID , 순차적 흐름을 알 수 있는 항목은 SEQ 입니다..

오라클 11g 입니다

감사합니다


by 마농 [2022.01.07 14:00:31]

변경이 없는 경우도 있겠죠? (seq ; 1)
여러번 변경이 일어나는 경우도 있을 것 같은데? (seq : 1, 2, 3, 4)
여러변 변경되는 경우 변경 여부 판별 기준 행이 어떻게 되나요?
- 마지막행과 첫행? 4 vs 1
- 마지막행과 이전행? 4 vs 3
- 전체행 모두 비교? 1,2,3,4


by 제리1 [2022.01.07 14:54:46]

변경 없는 경우도 있고 마지막 행과 이전 행만 비교하면 됩니다..!


by 마농 [2022.01.10 13:08:49]
WITH t AS
(
SELECT '0043' id, 1 hist_seq, 'H0200' ci_id, 'test123' name, '사용' status FROM dual
UNION ALL SELECT '0044', 1, 'H0202', 'test323', '사용'   FROM dual
UNION ALL SELECT '0044', 2, 'H0202', 'test323', '미사용' FROM dual
UNION ALL SELECT '0045', 1, 'H0202', 'test323', '사용'   FROM dual
UNION ALL SELECT '0045', 2, 'H0202', 'test323', '미사용' FROM dual
UNION ALL SELECT '0045', 3, 'H0202', 'test324', '미사용' FROM dual
)
SELECT id
     , hist_seq
     , ci_id , DECODE(ci_id , ci_id_1 , 'N', 'Y') ci_id_yn
     , name  , DECODE(name  , name_1  , 'N', 'Y') name_yn
     , status, DECODE(status, status_1, 'N', 'Y') status_yn
  FROM (SELECT id, hist_seq, ci_id, name, status
             , ROW_NUMBER() OVER(PARTITION BY id ORDER BY hist_seq DESC) rn
             , LAG(ci_id , 1, ci_id ) OVER(PARTITION BY id ORDER BY hist_seq) ci_id_1
             , LAG(name  , 1, name  ) OVER(PARTITION BY id ORDER BY hist_seq) name_1
             , LAG(status, 1, status) OVER(PARTITION BY id ORDER BY hist_seq) status_1
          FROM t
        )
 WHERE rn = 1
;

 

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