2016-02-05 144 views
0

我想在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 

我将不胜感激任何帮助。

您在此先感谢菲尔

回答

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] 
+0

我还没有遇到这种说法,但是看一下数据表,这将不会调高第一在预期输出中的行:'00011547,2001-07-17 00:00:00.000,1223' –

+0

@TT。你是对的。它不会。另一个适用于这些案件将解决它。但我怪数据= p – mxix

+0

感谢您的帮助,上述申请解决方案的工作,但没有返回TT指出的第一个预期输出。我会看看使用另一个应用来解决问题。 – PhilGarside

相关问题