안녕하세요~ 질문드립니다
아래와 같이 CHG_STAT 테이블의 조회결과 데이타가 있습니다
SELECT * FROM chg_stat
WHERE p_no = '75421658';
seq_no | p_no | chg_dt | sts |
151 | 75421658 | 20160501 | 20 |
155 | 75421658 | 20160524 | 10 |
162 | 75421658 | 20160601 | 10 |
171 | 75421658 | 20160615 | 10 |
236 | 75421658 | 20160801 | 42 |
240 | 75421658 | 20160915 | 10 |
257 | 75421658 | 20161001 | 10 |
위의 데이타는 p_no = '75421658' 의 상태값(sts) 이 변경된 이력입니다
여기서 노란색 값들은 상태가 변하지 않았는데 Insert된 잘못된 값입니다;
(상태가 최초로 변한 값은 필요합니다 ex> seq_no 가 '155', '240')
여기서 노란색 값을 제외하여 아래 표처럼 조회되게 가능한 SQL 해법이 있는지
조언 부탁드립니다!! 감사합니다.
seq_no | p_no | chg_dt | sts |
151 | 75421658 | 20160501 | 20 |
155 | 75421658 | 20160524 | 10 |
236 | 75421658 | 20160801 | 42 |
240 | 75421658 | 20160915 | 10 |
with t as ( select 151 seq_no, '75421658' p_no, '20160501' chg_dt, '20' sts from dual union all select 155 seq_no, '75421658' p_no, '20160524' chg_dt, '10' sts from dual union all select 162 seq_no, '75421658' p_no, '20160601' chg_dt, '10' sts from dual union all select 171 seq_no, '75421658' p_no, '20160615' chg_dt, '10' sts from dual union all select 236 seq_no, '75421658' p_no, '20160801' chg_dt, '42' sts from dual union all select 240 seq_no, '75421658' p_no, '20160915' chg_dt, '10' sts from dual union all select 257 seq_no, '75421658' p_no, '20161001' chg_dt, '10' sts from dual ) select seq_no, p_no, chg_dt, sts from ( select seq_no, p_no, chg_dt, sts , row_number() over(partition by p_no, sts, rn2 - rn1 order by seq_no) rn from ( select seq_no, p_no, chg_dt, sts, row_number() over(partition by p_no, sts order by seq_no) rn1 , row_number() over (order by seq_no) rn2 from t ) ) where rn = 1 order by seq_no