首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据日期选择适用的行

根据日期选择适用的行
EN

Stack Overflow用户
提问于 2012-10-05 01:51:20
回答 1查看 53关注 0票数 0

我有两个表,一个保存有关合约的信息,另一个保存汇率。

汇率表由3个字段组成-两个主键,一个用于货币代码(例如欧元),另一个用于汇率的开始日期

保存汇率的-One字段

合同表只保存有关合同的标准信息以及货币代码,作为汇率表和合同日期的外键。

我希望能够单独选择每一份合同以及合同日期适用的汇率。例如,如果我的合约日期是2012年9月20日,我有三种该合约货币的汇率,一种是从9月1日开始,一种是从9月12日开始,另一种是从9月30日开始。我如何确保只有9月12日的汇率与合约数据一起返回,而不是任何其他汇率,因为9月20日在该“期间”内。

是否有必要进行某种子查询?

我使用的是SQL Server 2005。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-05 02:02:02

数据结构的问题是,您有利率的第一个日期,而不是最后一个日期。实现这一点的一种方法是使用相关子查询。但是,我更喜欢使用排名函数来分配下一个日期:

代码语言:javascript
运行
复制
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都已经过去了。然后,它连接到这个表,以获得合同的适当费率。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12732893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档