SQL Server 2008 R2(是的,我们已经超过了延长的支持日期)
表A 具有供应商ID和日期。每个VendorID仅出现一次。
下面是表B 的摘要。表B可以多次具有相同的VendorID,并具有不同的日期。 (它显示了VendorID状态的历史记录。)
如何将表B连接到表A,以便获得表B的最新条目,该条目少于表A中该行的日期?
说,如果我只想“按供应商ID给我表B中的最新条目,那是在数据'yyyy-mm-dd”之前-不错。我可以使用窗口函数,然后将其加入到表A。
但是我不想在一个日期内执行此操作,数据会因表A行中的日期而异。
-例如,如果我要从表B中按VendorId按 set 日期获取最新条目。然后我可以加入结果,没问题。
select
sq.VendorId
,sq.PaymentType
from (
select
a.VendorId
,a.PaymentType
,row_number() over (partition by a.vendorid order by createdateutc
desc) as rn
from
ZpCustomers_Kim.dbo.VendorListPaymentTypeChangeAudit a --**Table B**
WHERE
CreateDateUTC < '2019-05-09'
) sq
where
sq.rn = 1
但是,如果我不想使用'2019-05-19',而是让日期取决于表A 的行中的日期,我该怎么做?
答案 0 :(得分:1)
我不确定您的查询与该问题有关。但是您可以使用apply
做您想做的事情:
select a.*, b.*
from a outer apply
(select top (1) b.*
from b
where b.VendorID = a.VendorID and
b.date <= a.date
order by d.ate desc
) b;