Sql server 连接两个日期在其他表日期范围内的表
我正在尝试在SSMS中编写SQL,以按日期连接两个表 表A保存了交易发生的实际日期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
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]