database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39652 게시물 읽기
No. 39652
오라클 기준점을 기준으로 잘라내기
작성자
나그네(mswow)
작성일
2012-09-21 11:33ⓒ
2012-09-21 11:34ⓜ
조회수
4,496

특정 데이터가

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을 기준으로 뒤에 값들을 제거한 최종 값을 가질려고 하는데요.. 

 

최종적으로 제가 뽑아낼려는 거는

5 A 1

6 A 0

7 A 0

8 A 0

.....

입니다.

프로시저말고 순수 쿼리로만 될 수 있는지 해서요..

고수님들 조언 부탁 드리겠습니다.

이 글에 대한 댓글이 총 3건 있습니다.

데이터 발생순서를 나타내는 값이 있다면 그 값을 기준으로 누계를 구해,

누계가 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을 더해, 데이터 발생 순서대로 누계를 구함

     FROM (

          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

     ) A

WHERE CUM_SUM_VAL >= 1     --> 누계가 1 이상인 값만 추출

 

m님이 2012-09-21 13:50에 작성한 댓글입니다. Edit

감사합니다~

나그네(mswow)님이 2012-09-21 14:52에 작성한 댓글입니다.

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

손님님이 2012-09-21 14:54에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39655ORA-00604 / ORA-01003 에러 문의합니다.
금현
2012-09-24
5621
39654그룹핑 한 결과의 마지막값 알아내기? [1]
골머리
2012-09-23
5222
39653순환조회? [2]
해외
2012-09-21
4637
39652오라클 기준점을 기준으로 잘라내기 [3]
나그네
2012-09-21
4496
39651특정시간대에 있는 데이터 구하기 [1]
똥줄
2012-09-21
4242
39649hanul072님 아래 where절에 case문에 대해 추가 질문 있습니다.
2012-09-20
4121
39648where절에 case문 질문입니다. [4]
2012-09-19
5663
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다