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 38827 게시물 읽기
No. 38827
해결책이 없을까여??[자체해결]
작성자
김영민(가온사랑)
작성일
2011-08-29 09:21ⓒ
2011-08-30 14:21ⓜ
조회수
4,873

기본 데이터가

 

WITH T AS
 (
 SELECT 'A' CAR, TO_DATE('20110801'||'2000', 'YYYYMMDDHH24MI') SDT, TO_DATE('20110802'||'0000', 'YYYYMMDDHH24MI') EDT FROM dual
 UNION
 SELECT 'B' CAR, TO_DATE('20110801'||'1000', 'YYYYMMDDHH24MI') SDT, TO_DATE('20110801'||'1300', 'YYYYMMDDHH24MI') EDT FROM dual
 UNION
 SELECT 'C' CAR, TO_DATE('20110801'||'1400', 'YYYYMMDDHH24MI') SDT, TO_DATE('20110801'||'1700', 'YYYYMMDDHH24MI') EDT FROM dual
 UNION
 SELECT 'C' CAR, TO_DATE('20110802'||'0800', 'YYYYMMDDHH24MI') SDT, TO_DATE('20110802'||'1000', 'YYYYMMDDHH24MI') EDT FROM dual
 ), COPY_T AS
 (SELECT TO_DATE('20110801'||'0000','yyyymmddhh24mi') + (LEVEL - 1) /24/6 AS BASIS_DT
    FROM DUAL
  CONNECT BY LEVEL <= (SELECT (TO_DATE('20110802'||'1800','yyyymmddhh24mi') - TO_DATE('20110801'||'1200','yyyymmddhh24mi')) * 24 * 6 +1 FROM DUAL)
 )

 

이렇게 존재할 경우에...

정해진  FROM ~ TO ('20110801'||'1200' ~ '20110802'||'1800' )에 차량별 예약시간이 비어있는 시간을 뽑기위한 방법입니다.

단 앞차량의 이용전후로 1시간은 이용할 수 없구여..

 

예상 결과

A 201108011200 ~201108011900

A 201108020100 ~ 201108021800

B 201108011400 ~ 201108021800

C 201108011200 ~ 201108011300

C 201108011800 ~ 201108020700

C 201108021100 ~ 201108021800

이런식으로 데이터를 추출할려고 하는데여.. 여러 고수님들의 고견 부탁드립니다.

 

 

######################################################################################

 

 

기준일자 : '201108010110' ~ '201108030110'를 기준으로 사용할수 있는 시간대의 자동차 내역 추출...

더 좋은 방법있으시면 알려주시면 감사하겠습니다.

WITH T AS
(
 SELECT 'A' CAR, TO_DATE('20110801'||'2000', 'YYYYMMDDHH24MI') SDT, TO_DATE('20110802'||'0000', 'YYYYMMDDHH24MI') EDT FROM dual
 UNION
 SELECT 'B' CAR, TO_DATE('20110801'||'1000', 'YYYYMMDDHH24MI') SDT, TO_DATE('20110801'||'1310', 'YYYYMMDDHH24MI') EDT FROM dual
 UNION
 SELECT 'C' CAR, TO_DATE('20110801'||'1430', 'YYYYMMDDHH24MI') SDT, TO_DATE('20110801'||'1700', 'YYYYMMDDHH24MI') EDT FROM dual
 UNION
 SELECT 'C' CAR, TO_DATE('20110802'||'0850', 'YYYYMMDDHH24MI') SDT, TO_DATE('20110802'||'1000', 'YYYYMMDDHH24MI') EDT FROM dual
)
SELECT DISTINCT CAR, FROM_DT, TO_DT, BETWEEN_TM
  FROM (
--CAR 기준으로 후 데이터
SELECT CAR
     , FROM_DT
     , TO_DT
     , CASE WHEN CEIL((TO_DT - FROM_DT) * 24)<3
            THEN 3
            ELSE CEIL((TO_DT - FROM_DT) *24) END AS BETWEEN_TM

  FROM( SELECT CAR
             , EDT + 1/24 AS FROM_DT
             , NVL(LEAD(SDT - 1/24) OVER(PARTITION BY CAR ORDER BY CAR, EDT ASC), TO_DATE('201108030110', 'YYYYMMDDHH24MI')) AS TO_DT
          FROM T
)
UNION ALL
--CAR 기준으로 앞 데이터
SELECT CAR
     , FROM_DT
     , TO_DT
     , CASE WHEN CEIL((TO_DT - FROM_DT) * 24)<3
            THEN 3
            ELSE CEIL((TO_DT - FROM_DT) *24) END AS BETWEEN_TM

  FROM( SELECT CAR
             , NVL(LAG(EDT + 1/24) OVER(PARTITION BY CAR ORDER BY CAR, SDT ASC), TO_DATE('201108010110', 'YYYYMMDDHH24MI')) AS FROM_DT
             , SDT - 1/24 AS TO_DT
          FROM T
)
) ORDER BY CAR, FROM_DT, TO_DT

[Top]
No.
제목
작성자
작성일
조회
38830sql developer 로드취소? [3]
전상도
2011-08-30
4745
38829group by 질문입니다. [3]
박대웅
2011-08-29
3763
38828sqlldr 실행시 중복된 행이 있을경우 옵션? [1]
김용남
2011-08-29
4553
38827해결책이 없을까여??[자체해결]
김영민
2011-08-29
4873
38826distinct 쓸때 hash groupby 가 풀립니다. [1]
슬라임
2011-08-27
4289
38825특정 유저가 사용하는 테이블스페이스 확인 방법??? [2]
장영권
2011-08-27
4651
38824목록 도움요청 [1]
오라클초보임
2011-08-26
4108
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다