2016-08-04 5 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 

(これらは、実際の結果はありません)私は1回の結果ではなく、日々の結果を取得する必要がありますが、特定の月の最後の日

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

その出力を生成する元のデータが表示されていません。日付ごとに1行ありますか?毎月の最終日に常に(正確に)1つの行がありますか? –

+0

はい、日付ごとに1行です。価格は常に異なっており、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分析方法を使用しています。