2016-08-04 7 views
0

일일 데이터를 기준으로 월말 가격을 얻으려고합니다. ISIN은 매핑 테이블에 있으며 날짜 등은 콘텐츠 테이블입니다. 작동하도록 쿼리를 어떻게 구성해야합니까?내부 조인이 포함 된 월말 데이터

select b.isin, last_Day(a.date) End_date, a.PRICE 
from MAPPING b, 
    CONTENT a 
where b.ISIN in ('xxx') 
    and a.date >= '31Jul2010' AND a.date <= '31Aug2010' 
    and a.instid = b.instid 

(이 실제 결과 없음) 나는 한 결과가 아닌 일상적인 결과를 얻을 수 있어야하지만, 특정 월

b.isin last_day a.price 
xxx 31/08/2010  p1 
xxx 31/08/2010  p2 
xxx 31/08/2010  p3 
xxx 31/08/2010  p4 
xxx 31/08/2010  p5 
xxx 31/08/2010  p6 
xxx 31/08/2010  p7 
xxx 31/08/2010  p8 
xxx 31/08/2010  p9 
xxx 31/08/2010  p10 
xxx 31/08/2010  p11 
xxx 31/08/2010  p12 
xxx 31/08/2010  p13 
xxx 31/08/2010  p14 
xxx 31/08/2010  p15 
xxx 31/08/2010  p16 
xxx 31/08/2010  p17 
xxx 31/08/2010  p18 
xxx 31/08/2010  p19 
xxx 31/08/2010  p20 
xxx 31/08/2010  p21 
xxx 31/08/2010  p22 

의 마지막 날에 내가 목적에 숨겨진 ISIN과 가격을 유지 . 그러나 논리는 같습니다. xxx 31/08.2010 a.price이어야하며 매달 다양한 선택의 여지가 있어야합니다.

+2

오늘의 팁 : 현대적이고 명시적인'JOIN' 구문으로 전환하십시오. 쓰기가 쉬우 며 (오류없이), 읽기 쉽고 유지 관리가 쉬우 며 필요한 경우 외부 조인으로 변환하기 쉽습니다. – jarlh

+1

해당 출력을 생성하는 원래 데이터를 표시하지 않았습니다. 날짜별로 한 행이 있습니까? 매월 말일에 항상 (정확하게) 행이 하나 있습니까? –

+0

예, 날짜 당 정확히 한 행. 가격은 항상 다릅니다. ISIN은 항상 같습니다. 데이터베이스 가격과 마찬가지로 매일, 특정 기간 (예 : 3 년) 월간 데이터를 얻고 싶습니다. 의견을 보내 주셔서 감사합니다, 아래 귀하의 솔루션을 시도합니다. – FactsAre

답변

0

이 당신에게 각 달의 마지막 날, 그리고 (당신은 당신의 데이터에 차이가있는 경우, 해당 월의 마지막 날하지 않을 수 있습니다) 당신에 대한 데이터가 마지막 날에 가격을 줄 것이다 :

을 7 월과 8 월에 대한 데이터와
-- CTEs to generate fake data 
with content (instid, a_date, price) as (
    select 42, date '2010-08-09' + level, 'p'||level 
    from dual connect by level <= 22 
), 
mapping (instid, isin) as (
    select 42, 'xxx' from dual 
) 
select b.isin, 
    last_day(a.a_date) as last_day, 
    max(a.price) keep (dense_rank last order by a.a_date) as price 
from mapping b 
join content a 
on a.instid = b.instid 
where b.isin in ('xxx') 
and a.a_date >= date '2010-07-31' AND a.a_date <= date '2010-08-31' 
group by b.isin, last_day(a.a_date); 

ISI LAST_DAY PRICE         
--- ---------- ----------------------------------------- 
xxx 2010-08-31 p22          

는 비슷한 방법으로 생성, 당신은 얻을 :

ISI LAST_DAY PRICE         
--- ---------- ----------------------------------------- 
xxx 2010-07-31 p22          
xxx 2010-08-31 p52          

이 그룹 내 최신 가격을 찾기 위해 keep dense_rank 분석 방법을 사용합니다.

관련 문제