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 38931 게시물 읽기
No. 38931
쿼리문의
작성자
mangchi
작성일
2011-10-04 04:24
조회수
3,514

쿼리 문의 드립니다.

id     depth   parent_id

6.          1          ?
6.1        2          ?
7.          1
7.1        2
9.          1
9.1        2
9.1.1     3
10.1      3
10.2      2

위와 같은 테이블에서 parent_id를 구하려고 합니다.

depth필드를 기준으로 위로 가장 가까운 부모값(depth-1)의 아이디를 구하려고 합니다.

예를 들면  id 9.1의 경우는 parent_id가 9가 되고  10.1의 경우 9.1이 parent_id가 됩니다.

이리저리 고민을 해보는데 잘 안되네요

 

 

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

우선 전제조건으로 정렬순서가 정해져야만 가능합니다.
임의로 seq 컬럼을 추가하여 처리했습니다.

WITH t AS
(
SELECT 1 seq, '6.' id, 1 depth FROM dual
UNION ALL SELECT 2, '6.1'  , 2 FROM dual
UNION ALL SELECT 3, '7.'   , 1 FROM dual
UNION ALL SELECT 4, '7.1'  , 2 FROM dual
UNION ALL SELECT 5, '9.'   , 1 FROM dual
UNION ALL SELECT 6, '9.1'  , 2 FROM dual
UNION ALL SELECT 7, '9.1.1', 3 FROM dual
UNION ALL SELECT 8, '10.1' , 3 FROM dual
UNION ALL SELECT 9, '10.2' , 2 FROM dual
)
SELECT seq
     , id
     , depth
     , (SELECT MAX(id) KEEP(DENSE_RANK LAST ORDER BY seq)
          FROM t
         WHERE seq   < a.seq
           AND depth = a.depth - 1
        ) parent_id
  FROM t a
 ORDER BY seq
;

마농(manon94)님이 2011-10-04 10:36에 작성한 댓글입니다.

급한관계로 지저분하게 처리는 했는데

역시 깔끔한 쿼리 감사합니다.

mangchi님이 2011-10-04 11:59에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
38934오렌지에서 Trace 설정하는 방법좀 알려주세요 ^^:
정현석
2011-10-04
4859
38933왕초보 질문입니다. ora-01598
minhh
2011-10-04
3675
38932OCCI 라이브러리에서 select후 전체 row값 가져오는방법??
이동희
2011-10-04
3870
38931쿼리문의 [2]
mangchi
2011-10-04
3514
38930캐릭터셋 관련 일본어 저장 질문이요 도와주세요.
이종성
2011-09-30
3896
38929tansname.ora 궁금한점 입니다. [2]
장영권
2011-09-30
3789
38927아래질문의 추가 정보 입니다. [3]
김종열
2011-09-30
5078
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다