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 40736 게시물 읽기
No. 40736
조건 정시기준 분할 데이터 문의 드립니다.
작성자
김태경(cranes)
작성일
2015-03-16 02:02ⓒ
2015-03-16 02:03ⓜ
조회수
7,511

안녕하세요

 

마농님 항상 감사합니다. 덕분에 프로젝트 거의 마무리 단계입니다.

 

지난번 것을 잘 사용하고 있는데 요청사항이 들어와서

 

지난번 거에 보충해서 여쭤봅니다.

 

 

 

 

다음과 같이 시작시간과 종료시간 으로 구성되어진 테이블입니다.

 

이걸 정시기준으로 데이타를 분할하는데 앞에 kind 가 1 일 경우만 인위적인 데이타가 만들어져야 하는데 가능할지 문의 드립니다

 

조건 크로스 조인이 생각대로 잘 않되는군요

 

 

WITH t AS

(SELECT 1 kind , 1 TYPE , '2014-11-20 04:24:53' sdt, '2014-11-20 05:25:04' edt FROM dual

UNION ALL SELECT 2 ,2, '2014-11-20 07:25:05', '2014-11-20 09:25:14' FROM dual

UNION ALL SELECT 2, 3,'2014-11-20 04:26:28', '2014-11-20 04:57:00' FROM dual

 

)

 

SELECT * FROM T

 

데이타는

 

1,1 ,1, '2014-11-20 04:24:53' , '2014-11-20 05:00:00',

1,1 ,2, '2014-11-20 05:00:00' , '2014-11-20 05:25:04',

 

2,2 ,1, '2014-11-20 07:25:05' , '2014-11-20 09:25:14',

 

2,3 ,1, '2014-11-20 04:26:28' , '2014-11-20 04:57:00'

 

 

이런식입니다.

 

그리고 위의 테이블 처럼 시작 시간과 종료 시간의 필드를 가진 테이블에서 정시기준으로 분할되어질 데이타를 검색하고 싶은데 가능할지도 문의 드립니다.

 

그리고 데이타가 많을 경우 무리가 없을까요?

 

 

감사합니다.

 

 

 

 

 

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

SELECT kind
     , type
     , lv
     , TO_CHAR(
       GREATEST(sdt, TRUNC(sdt, 'hh') + (lv-1)/24)
       , 'yyyy-mm-dd hh24:mi:ss') sdt
     , TO_CHAR(
       LEAST(edt, TRUNC(sdt, 'hh') + lv/24)
       , 'yyyy-mm-dd hh24:mi:ss') edt
  FROM (SELECT kind, type
             , TO_DATE(sdt, 'yyyy-mm-dd hh24:mi:ss') sdt
             , TO_DATE(edt, 'yyyy-mm-dd hh24:mi:ss') edt
          FROM t
        )
     , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9)
 WHERE lv <= DECODE(kind, 1, (TRUNC(edt, 'hh') - TRUNC(sdt, 'hh'))*24+1, 1)
 ORDER BY kind, type, lv
;

마농(manon94)님이 2015-03-16 09:41에 작성한 댓글입니다.
이 댓글은 2015-03-16 09:41에 마지막으로 수정되었습니다.
마농님 진심으로 너무 감사합니다. 
 
근데 원본 테이블 3번째 시간을 조정했더니 '2014-11-20 02:00:00'  정시로 짤려서 
 
다음과 같이 사용했습니다.
 
더 나은 방법이 있는지요 ?
 
WITH t AS
(SELECT 1 kind , 1 TYPE , '2014-11-20 04:24:53' sdt, '2014-11-20 05:25:04' edt FROM dual
UNION ALL SELECT 2 ,2, '2014-11-20 07:25:05', '2014-11-20 09:25:14' FROM dual
UNION ALL SELECT 2, 3,'2014-11-20 01:26:28', '2014-11-20 04:57:00' FROM dual
 
)
 
 
SELECT kind
     , type
     , lv
     ,  TO_CHAR(DECODE ( kind , 1 , GREATEST(sdt, TRUNC(sdt, 'hh') + (lv-1)/24) , sdt ) , 'yyyy-mm-dd hh24:mi:ss') sdt  
     ,  TO_CHAR(DECODE ( kind , 1 , LEAST(edt, TRUNC(sdt, 'hh') + lv/24) , edt  )  , 'yyyy-mm-dd hh24:mi:ss')    edt
  FROM (SELECT kind, type
             , TO_DATE(sdt, 'yyyy-mm-dd hh24:mi:ss') sdt
             , TO_DATE(edt, 'yyyy-mm-dd hh24:mi:ss') edt
          FROM t
        ) , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9) 
 where (  lv <= DECODE(kind, 1, (TRUNC(edt, 'hh') - TRUNC(sdt, 'hh'))*24+1, 1) )
 ORDER BY kind, type, lv
;
 
 
너무 감사합니다.
김태경(cranes)님이 2015-03-16 13:22에 작성한 댓글입니다.
이 댓글은 2015-03-16 13:40에 마지막으로 수정되었습니다.

SELECT kind
     , type
     , lv
     , TO_CHAR(
       DECODE(kind, 1, GREATEST(sdt, TRUNC(sdt, 'hh') + (lv-1)/24), sdt)
       , 'yyyy-mm-dd hh24:mi:ss') sdt
     , TO_CHAR(
       DECODE(kind, 1, LEAST(edt, TRUNC(sdt, 'hh') + lv/24), edt)
       , 'yyyy-mm-dd hh24:mi:ss') edt
  FROM (SELECT kind, type
             , TO_DATE(sdt, 'yyyy-mm-dd hh24:mi:ss') sdt
             , TO_DATE(edt, 'yyyy-mm-dd hh24:mi:ss') edt
          FROM t
        )
     , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9)
 WHERE lv <= CASE WHEN kind != 1 THEN 1
             ELSE ROUND((TRUNC(edt, 'hh') - TRUNC(sdt, 'hh'))*24)+1 END
 ORDER BY kind, type, lv
;

마농(manon94)님이 2015-03-16 13:48에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40744그룹해서 최대 데이터 4개 출력 [2]
윤민근
2015-03-17
6346
40738[쿼리질문] 세로열을 가로열로 만들기 [4]
최혁준
2015-03-17
7977
40737아우터 조인 관련 질문 [1]
궁금
2015-03-16
7254
40736조건 정시기준 분할 데이터 문의 드립니다. [3]
김태경
2015-03-16
7511
40735while문 이용해서 로그인 쿼리 [1]
권기범
2015-03-12
6632
40734VB에서 오라클 WITH 문 사용시 오류 [2]
이창선
2015-03-12
7598
40733두 테이블 비교 후 기준데이터 추출
리민우
2015-03-10
7103
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.030초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다