2012-10-04 61 views
0

我有兩張表,一張持有合約信息,另一張持有匯率。根據日期選擇適用的行

匯率表由3個字段 高達 - 兩個主鍵,一個用於貨幣代碼(例如EURO),一個用於交換速率

-One字段,其保持交換的開始日期率

合同表只是持有有關合同的標準信息以及貨幣代碼作爲匯率表和合同日期的外鍵。

我希望能夠單獨選擇每份合同以及合同日期的適用匯率。因此,例如,如果我的合同日期是2012年9月20日,並且我有三種合同貨幣的匯率,一種是從9月1日開始的,一種是從9月12日開始的,另一種是9月30日開始。我如何確保只有9月12日的匯率與合同數據一起返還,而不是其他任何利率,因爲9月20日屬於該「期限」。

是否需要某種子查詢? 2005年

回答

0

與數據結構的問題

我使用SQL Server是你第一次約會,但不是爲了率最後日期。一種方法是使用相關的子查詢。不過,我更喜歡使用排序功能,指派下一個日期:

with fxr as (
    select fx.*, 
      row_number() over (partition by ccy order by exdate) as seqnum 
    from fx 
    ), 
    fxrates as (
    select fxr.*, coalesce(fxnext.exdate, getdate()+1) as next_exdate 
    from fxr left outer join 
      fxr fxnext 
      on fxr.ccy = fxnext.ccy and 
      fxr.seqnum + 1 = fxnext.seqnum 
    ) 
select c.*, f.fxrate 
from contracts c left outer join 
    fxrates f 
    on c.ccy = f.ccy and 
     c.thedate >= f.exdate and 
     c.thedate < f.next_exdate 

這是分配在fxrates CTE貨幣週期的結束日期。對於最近的一次,結束日期是明天 - 可能所有的fxrates都是過去的。然後它加入到這張表中以得到合同的適當費率。