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 39627 게시물 읽기
No. 39627
기간별 이력 쿼리 질문 드립니다.
작성자
논어
작성일
2012-09-07 15:23
조회수
5,003

이력 테이블을 가지고 일자별로 마스터에 있는 항목값을 구하고자 합니다.

예를 들어 아래와 같이 마스터 이력 테이블이 있다고 하면,

마스터 테이블
날짜       항목
2012-01-01 A1 
2012-01-02 A1 
2012-01-03 A1 
2012-01-04 A1 
2012-01-05 A1 
2012-01-06 A1 

이력 테이블
날짜       항목 변경타입
2012-01-01 A1 PPP
2012-01-03 A1 QQQ
2012-01-06 A1 ZZZ


구하고자 하는 결과는 다음과 같습니다.

날짜       항목 타입
2012-01-01 A1 PPP
2012-01-02 A1 PPP
2012-01-03 A1 QQQ
2012-01-04 A1 QQQ
2012-01-05 A1 QQQ
2012-01-06 A1 ZZZ
2012-01-07 A1 ZZZ

즉, 2012-01-01 ~ 2012-01-02(이력변경) 까지는 타입이 PPP
2012-01-03 ~ 2012-01-05(이력변경) 까지는 타입이 QQQ
2012-01-06 ~ 타입이 ZZZ
 

부탁 드립니다.

 

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

WITH MAST AS
(
 SELECT '2012-01-01' DT, 'A1' CD FROM DUAL UNION ALL
 SELECT '2012-01-02' DT, 'A1' CD FROM DUAL UNION ALL
 SELECT '2012-01-03' DT, 'A1' CD FROM DUAL UNION ALL
 SELECT '2012-01-04' DT, 'A1' CD FROM DUAL UNION ALL
 SELECT '2012-01-05' DT, 'A1' CD FROM DUAL UNION ALL
 SELECT '2012-01-06' DT, 'A1' CD FROM DUAL
), HIST AS
(
 SELECT '2012-01-01' DT,  'A1' CD, 'PPP' TYPE FROM DUAL UNION ALL
 SELECT '2012-01-03' DT,  'A1' CD, 'QQQ' TYPE FROM DUAL UNION ALL
 SELECT '2012-01-06' DT,  'A1' CD, 'ZZZ' TYPE FROM DUAL
)
SELECT  M.DT
       ,M.CD
       ,H.TYPE
       ,LAST_VALUE(H.TYPE IGNORE NULLS) OVER (ORDER BY M.DT, M.CD)
FROM   MAST M,
       HIST H
WHERE  M.DT = H.DT(+)
AND    M.CD = H.CD(+)
ORDER  BY 1,2
      

DOL님이 2012-09-07 17:00에 작성한 댓글입니다. Edit

정말 감사합니다.

한가지 질문이 더 있습니다.

 

위의 쿼리에서 날짜로 조인 을 하였는데요.

이력이 포함되지 않은 날짜를 조회할 경우에도 이력을 참조하여 값을 구하고자 할 경우에는 어떻게 해야 할까요?

마스터 테이블
날짜 항목
2012-05-01 A1
2012-05-02 A1
2012-05-03 A1
2012-05-04 A1
2012-05-05 A1
2012-05-06 A1

이력 테이블
날짜 항목 변경타입
2012-01-01 A1 PPP
2012-01-03 A1 QQQ
2012-01-06 A1 ZZZ


구하고자 하는 결과는 다음과 같습니다.

날짜 항목 타입
2012-05-01 A1 ZZZ
2012-05-02 A1 ZZZ
2012-05-03 A1 ZZZ
2012-05-04 A1 ZZZ
2012-05-05 A1 ZZZ
2012-05-06 A1 ZZZ

퍽션을 사용하지 않고 구할 수 있는 방법은 없을까요?

다시 한번 정말 감사합니다.

 

논어님이 2012-09-13 18:12에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39630프로시져 내에서 서브프로시져를 호출하고 결과를 기다리지 않는 법 [4]
이무용
2012-09-10
6222
39629단골 고객 구하는 쿼리 질문 입니다. [2]
박상민
2012-09-10
4392
39628oracle odbc로 접속후 where 절에 한글 검색을 하면 안나옵니다.
막시무스
2012-09-07
4804
39627기간별 이력 쿼리 질문 드립니다. [2]
논어
2012-09-07
5003
39625벌크인서트 질문입니다. [1]
홍두표
2012-09-06
4688
39624유동적으로 쿼리 데이터가 더 많이 조회되는 쿼리 문의드립니다. [2]
때지
2012-09-06
4910
39623테이블 스페이스 확장 에러에 대해 [2]
이무용
2012-09-06
8116
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다