根据日期顺序连接两个表
Join two tables depending on date sequence
在 SQL Server 2008 中,我想根据日期顺序加入两个 table。更具体地说,我需要按照以下规则将 Payments
table 左连接到 Profiles
table:
UserId
必须匹配
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
条记录。另一个限制是我无权向数据库中写入任何内容。
我的想法是先左连接 Payments
和 Profiles
,然后在匹配每个 (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
在 SQL Server 2008 中,我想根据日期顺序加入两个 table。更具体地说,我需要按照以下规则将 Payments
table 左连接到 Profiles
table:
UserId
必须匹配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
条记录。另一个限制是我无权向数据库中写入任何内容。
我的想法是先左连接 Payments
和 Profiles
,然后在匹配每个 (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