특정 데이터가
1 A 0
2 A 0
3 A 0
4 A 0
5 A 1
6 A 0
7 A 0
8 A 0
.....
이런식으로 있습니다. 이 상태에서 1을 기준으로 뒤에 값들을 제거한 최종 값을 가질려고 하는데요..
최종적으로 제가 뽑아낼려는 거는
입니다.
프로시저말고 순수 쿼리로만 될 수 있는지 해서요..
고수님들 조언 부탁 드리겠습니다.
데이터 발생순서를 나타내는 값이 있다면 그 값을 기준으로 누계를 구해,
누계가 1 이상인 데이터를 추출하면 될 것 같습니다.
SELECT A.VAL1
,A.VAL2
,A.VAL3
FROM (
SELECT A.*
,DECODE(VAL3, '1', 1) VAL3_MOD
,SUM(DECODE(VAL3, '1', 1)) OVER (ORDER BY VAL1, VAL2)
CUM_SUM_VAL
--> VAL3이 '1'일 때만 1을 더해, 데이터 발생 순서대로 누계를 구함
SELECT 1 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL UNION ALL
SELECT 2 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL UNION ALL
SELECT 3 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL UNION ALL
SELECT 4 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL UNION ALL
SELECT 5 VAL1, 'A' VAL2, '1' VAL3 FROM DUAL UNION ALL
SELECT 6 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL UNION ALL
SELECT 7 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL UNION ALL
SELECT 8 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL
) A
WHERE CUM_SUM_VAL >= 1 --> 누계가 1 이상인 값만 추출
감사합니다~
WITH TBL AS ( SELECT 1 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL UNION ALL SELECT 2 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL UNION ALL SELECT 3 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL UNION ALL SELECT 4 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL UNION ALL SELECT 5 VAL1, 'A' VAL2, '1' VAL3 FROM DUAL UNION ALL SELECT 6 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL UNION ALL SELECT 7 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL UNION ALL SELECT 8 VAL1, 'A' VAL2, '0' VAL3 FROM DUAL ), TEMP AS ( SELECT T.* ,ROW_NUMBER() OVER (ORDER BY VAL1) ROWN FROM TBL T )
SELECT VAL1,VAL2,VAL3 FROM TEMP WHERE ROWN >= ( SELECT MIN(ROWN) FROM TEMP WHERE VAL3 ='1') ORDER BY VAL1