我有 2 个表,我需要从中获取唯一记录。当条件不匹配时,我需要获取下一个有效值。
表A -
参考号 | 结束日期 | 开始日期 |
---|---|---|
1234 | 20071010 | 20070618 |
1234 | 20051021 | 20050627 |
1234 | 20060608 | 20060220 |
B表-
参考号 | 比较日期 | 名字 | 姓氏 |
---|---|---|---|
1234 | 19680611 | 约翰 | 史密斯 |
1234 | 20060220 | 约翰 | 梅森 |
1234 | 20070618 | 约翰 | 史密斯 |
结果应该是-
参考号 | 结束日期 | 开始日期 | 名字 | 姓氏 |
---|---|---|---|---|
1234 | 20071010 | 20070618 | 约翰 | 史密斯 |
1234 | 20051021 | 20050627 | 约翰 | 梅森 |
1234 | 20060608 | 20060220 | 约翰 | 梅森 |
我当前的查询是
SELECT RN = ROW_NUMBER() OVER (ORDER BY A.Refno), A.Refno, A.Startdate, A.Firstname, A.Lastname, A.EndDate
FROM Table A A
LEFT JOIN Table B b
ON A.Refno = B.Refno
WHERE A.Startdate BETWEEN B.StartDate AND B.Enddate
我现在的成绩是
RN | Refno | 开始日期 | 名字 | 姓氏 | 结束日期 |
---|---|---|---|---|---|
1 | 01000184 | 20070618 | 约翰 | 史密斯 | 20071010 |
2 | 01000184 | 20060220 | 约翰 | 梅森 | 20060608 |
没有存储过程是否可以得到我的结果?感谢任何帮助。
如果开始日期和结束日期在开始日期之间,我需要从一个表中获取名字和姓氏。当条件匹配时我得到了,但我需要所有 3 行的名字和姓氏来自另一行。
我们可以使用
apply
获得离参考结束日期“最近”的行。由于我们忽略了开始日期,这很高兴地返回了“上一个”匹配项。
select row_number() over(partition by a.refNo order by a.startDate) rn,
a.*,
b.firstName, b.lastName
from tablea a
outer apply (
select top (1) b.*
from tableb b
where b.refNo = a.refNo and b.dateCompare <= a.dateEnd
order by b.dateCompare desc
) b
order by rn