根据日期顺序连接两个表

Join two tables depending on date sequence

在 SQL Server 2008 中,我想根据日期顺序加入两个 table。更具体地说,我需要按照以下规则将 Payments table 左连接到 Profiles table:

  1. UserId必须匹配

  2. Payments中的每条记录都与Profiles中最接近Payments.PayDate之前的Profiles.CreationDate的记录相匹配。

为了简化示例,

Table Payments:
UserId  PayDate Amount
1       2012    400
1       2010    500
2       2014    600

Table Profiles:
UserId  CreationDate Address
1       2009         NY
1       2015         MD
2       2007         NJ
2       2013         MA
3       2008         TX

Desired Result:
UserId  CreationDate PayDate Amount Address
1       2009         2010    500    NY
1       2009         2012    400    NY
2       2013         2014    600    MA

保证用户在支付前至少有1条Profiles条记录。另一个限制是我无权向数据库中写入任何内容。

我的想法是先左连接 PaymentsProfiles,然后在匹配每个 (UserId, PayDate) 元组的记录组中,按 CreationDate 排序,然后 [=31] =] 最后一条记录。但是我不知道如何用 SQL 语言实现它,或者有没有更好的方法来进行这种合并?

使用 Outer Apply 执行此操作。

SELECT py.UserId,
       CreationDate,
       PayDate,
       Amount,
       Address
FROM   Payments py
       OUTER APPLY (SELECT TOP 1 *
                    FROM   Profiles pr
                    WHERE  py.UserId = pr.UserId
                    and    PayDate> CreationDate
                    ORDER  BY CreationDate desc) cs 

SQLFIDDLE DEMO