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 39653 게시물 읽기
No. 39653
순환조회?
작성자
해외
작성일
2012-09-21 23:30ⓒ
2012-09-21 23:33ⓜ
조회수
4,638

안녕하세요...

다름이 아니오라..

순환 조회?? 에 대해서 여쭈어 보렬 합니다.

색깔 코드

CODE TABLE
CODE    COLOR_CODE
01      WHITE
02      RED
03      BLUE
04      BLACK

DATA TABLE

WORK_DATE      START_TIME          END_TIME        CODE   COLOR_CODE
2012/09/20     2012/09/20 06:00:00      2012/09/20 08:00:00     01      WHITE
2012/09/20     2012/09/20 12:00:00      2012/09/20 14:00:00     02      RED
2012/09/20     2012/09/20 16:00:00      2012/09/20 21:00:00     03      BLUE
2012/09/20     2012/09/20 22:00:00      2012/09/20 23:00:00     04      BLACK

이렇게 하루만 조회하면 문제가 없는데...
BETWEEN을 이용하여 이틀간 조회 할때는
당일 기준으로 어제 "마지막 데이터"를 기준으로 역순으로 순환 조회를 해야 합니다.
한마디로 마지막 데이터가 칼라 코드 순서되로 'BLACK'로 끝났으면, 꺼구로..BLUE => RED => WHITE 이런 순으로..

WORK_DATE      START_TIME          END_TIME                       CODE   COLOR_CODE
2012/09/20     2012/09/20 06:00:00      2012/09/20 08:00:00     01      WHITE
2012/09/20     2012/09/20 12:00:00      2012/09/20 14:00:00     02      RED
2012/09/20     2012/09/20 16:00:00      2012/09/20 21:00:00     03      BLUE
2012/09/20     2012/09/20 22:00:00      2012/09/20 23:00:00     04      BLACK

2012/09/21     2012/09/21 06:00:00      2012/09/21 08:00:00     03      BLUE
2012/09/21     2012/09/21 12:00:00      2012/09/21 14:00:00     02      RED
2012/09/21     2012/09/21 16:00:00      2012/09/21 21:00:00     01      WHITE
2012/09/21     2012/09/21 22:00:00      2012/09/21 23:00:00     02      RED

이렇게 하고 싶습니다.
즉, 01 -> 02 -> 03 -> 04 -> 03 -> 02 -> 01 -> 02 -> 03 ->......이렇게 순환적으로...

두서 없어서 죄송합니다.

 

 

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

select sum(chk) over(order by cd)  result
  from (select level cd, decode(mod(trunc((level-1.01)/3),2), 0,1, -1) chk
          from dual
        connect by level <= 20
       )
 

위의 쿼리가 도움이 되었으면 합니다.

 

준(BBANGGGU)님이 2012-09-24 16:34에 작성한 댓글입니다.

먼저 답변 감사합니다.

그런데 문제가.... 이걸 갖고 어떻게 해볼라는데.... 계속 무한로프가 돈다고 하네요...

WITH t AS
(
           SELECT  '01' colorcode,'02' colorupcode ,'W' color, 'AA' ITEM, '2012/09/10' regdate FROM dual
UNION ALL SELECT '02','03', 'N', 'BB'  , '2012/09/10' FROM dual
UNION ALL SELECT '03','04', 'C', 'CC'  , '2012/09/10' FROM dual
UNION ALL SELECT '04','05','R', 'DD'   , '2012/09/10' FROM dual
UNION ALL SELECT '05','04', 'B', 'EE'  , '2012/09/10' FROM dual
UNION ALL SELECT '03','04', 'C', 'CC'  , '2012/09/11' FROM dual
UNION ALL SELECT '05','04', 'B', 'EE'  , '2012/09/11' FROM dual
UNION ALL SELECT '04','05', 'R', 'DD'  , '2012/09/11' FROM dual
)
SELECT colorcode, LAG_colorcode, color, regdate, rn1, rn2, rn3    

  FROM (
SELECT colorcode, color, regdate
             , ROW_NUMBER() OVER(ORDER BY colorcode) rn1
             , ROW_NUMBER() OVER(PARTITION BY regdate ORDER BY regdate) rn2
              , ROW_NUMBER() OVER(PARTITION BY regdate ORDER BY colorcode ) rn3
             ,LAG(colorcode) OVER(ORDER BY regdate  ASC) AS LAG_colorcode
          FROM t
  )
 WHERE CEIL(rn1/10) = 1
 ORDER BY  regdate, colorcode
          
;

 

이렇게 도 해보고,  저렇게도 해보고...머리만 복잡합니다.

이렇게 하면 colorcode 코드는 그대로예요...

답변 주신걸 이용할수 있는 방법이 없을까요?

가르쳐 줘도 모르네요...죄송합니다.

 

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