我有两个表,一个保存有关合约的信息,另一个保存汇率。
汇率表由3个字段组成-两个主键,一个用于货币代码(例如欧元),另一个用于汇率的开始日期
保存汇率的-One字段
合同表只保存有关合同的标准信息以及货币代码,作为汇率表和合同日期的外键。
我希望能够单独选择每一份合同以及合同日期适用的汇率。例如,如果我的合约日期是2012年9月20日,我有三种该合约货币的汇率,一种是从9月1日开始,一种是从9月12日开始,另一种是从9月30日开始。我如何确保只有9月12日的汇率与合约数据一起返回,而不是任何其他汇率,因为9月20日在该“期间”内。
是否有必要进行某种子查询?
我使用的是SQL Server 2005。
发布于 2012-10-05 02:02:02
数据结构的问题是,您有利率的第一个日期,而不是最后一个日期。实现这一点的一种方法是使用相关子查询。但是,我更喜欢使用排名函数来分配下一个日期:
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中指定货币期间的结束日期。对于最近的一次,结束日期是明天--据推测,所有fxrate都已经过去了。然后,它连接到这个表,以获得合同的适当费率。
https://stackoverflow.com/questions/12732893
复制相似问题