Sql server 连接两个日期在其他表日期范围内的表

Sql server 连接两个日期在其他表日期范围内的表,sql-server,date,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.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
我将感谢任何帮助


提前谢谢你,菲尔。你可以用接线员轻松地完成


我还没有运行此语句,但是查看数据表,这不会显示预期输出的第一行:000115472001-07-1700:00:00.000,1223@TT. 你说得对。不会的。如果再申请这些案件,就会解决这个问题。但是我责备Data=pThanks因为你的帮助上面的apply解决方案起了作用,但是没有像TT指出的那样返回第一个预期的输出。我将看看如何使用另一个应用程序来解决这个问题。@PhilGarside您提供的示例数据表明,您没有创建第一条记录时的速率。获取可用的第一个速率,或者只是更正数据,以便在为NULL时应用默认速率,或者更正数据,避免对丢失的数据进行处理。祝你好运=
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]