将表B加入表A,其中表B是审核历史记录,并且只希望表A上的日期之前的最新表B条目

时间:2019-07-18 00:34:10

标签: sql tsql

SQL Server 2008 R2(是的,我们已经超过了延长的支持日期)

表A 具有供应商ID和日期。每个VendorID仅出现一次。

下面是表B 的摘要。表B可以多次具有相同的VendorID,并具有不同的日期。 (它显示了VendorID状态的历史记录。)

Table B

如何将表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 的行中的日期,我该怎么做?

1 个答案:

答案 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;