加入两个表,其中日期在其他表日期范围内

时间:2016-02-05 17:07:31

标签: sql-server date

我正在尝试在SSMS中编写SQL以按日期连接两个表。

表A保存交易发生的实际日期

    SELECT  A.Client,
    A.TrnDate,
    FROM    dbo.Transation A

    Client      TrnDate
    00011547    2001-07-17 00:00:00.000
    00011547    2013-07-04 00:00:00.000
    00011547    2013-11-13 00:00:00.000
    00011547    2014-12-14 00:00:00.000
    00011547    2014-12-14 00:00:00.000

表B列出了交易应从有效期开始按成本计算的费率。

     SELECT     B.Client,
        B.Effdate,
        B.Rate
     FROM       dbo.ChargeRate B 

    Client      EffDate                 Rate
    00011547    2008-04-01 00:00:00.000 1223
    00011547    2013-05-28 00:00:00.000 1224
    00011547    2013-10-01 00:00:00.000 1302
    00011547    2014-01-01 00:00:00.000 1355
    00011547    2014-04-01 00:00:00.000 1376
    00011547    2014-07-01 00:00:00.000 1397

正如您所看到的,交易日期可以介于有效期间,我希望连接表格如下所示。

    Client      TrnDate                  Rate
    00011547    2001-07-17 00:00:00.000  1223
    00011547    2013-07-04 00:00:00.000  1224
    00011547    2013-11-13 00:00:00.000  1302
    00011547    2014-12-14 00:00:00.000  1397
    00011547    2014-12-14 00:00:00.000  1397

我将不胜感激。

先谢谢你菲尔

1 个答案:

答案 0 :(得分:0)

您可以使用APPLY运算符

轻松完成
select
    [T].[Client],
    [T].[TrnDate],
    [CR].[Rate]
from dbo.Transaction [T]
outer apply (
    select top 1
        [CR].[Rate]
    from dbo.ChargeRate [CR]
    where
        [CR].EffDate <= [TrnDate]
    order by
        [EffDate] DESC
) [CR]