假设我有表1和表2,其中包含以下数据。我想找到表 1(JoiningDt) 中每个 ID 的 Table2.ClosestDt 中可用的下一个最接近的日期匹配项。注意:表 2 中的最接近匹配应大于表 1 的日期,并且 2 个 ID 不能具有相同的最接近匹配(例如:ID 2 应采用值 08-Apr-2024,即使 07-Apr-2024 是最接近的1,因为它已被 ID 1 占用。)
表1:
身份证 | 加入Dt | 文档编号 |
---|---|---|
1 | 2024 年 4 月 5 日 | A123 |
2 | 2024 年 4 月 6 日 | A123 |
3 | 2024 年 4 月 4 日 | B123 |
表2
文档编号 | 最近Dt |
---|---|
A123 | 2024 年 4 月 3 日 |
A123 | 2024 年 4 月 4 日 |
A123 | 2024 年 4 月 7 日 |
A123 | 2024 年 4 月 8 日 |
B123 | 2024 年 4 月 2 日 |
B123 | 2024 年 4 月 5 日 |
我的预期输出是:
身份证 | 加入Dt | 文档编号 | 最近Dt |
---|---|---|---|
1 | 2024 年 4 月 5 日 | A123 | 2024 年 4 月 7 日 |
2 | 2024 年 4 月 6 日 | A123 | 2024 年 4 月 8 日 |
3 | 2024 年 4 月 4 日 | B123 | 2024 年 4 月 5 日 |
当我尝试左外连接时,我得到
身份证 | 加入Dt | 文档编号 | 最近Dt |
---|---|---|---|
1 | 2024-04-05 | A123 | 2024-04-07 |
1 | 2024-04-05 | A123 | 2024-04-08 |
2 | 2024-04-06 | A123 | 2024-04-07 |
2 | 2024-04-06 | A123 | 2024-04-08 |
3 | 2024-04-04 | B123 | 2024-04-05 |
select t1.ID,t1.JoiningDt,t1.DocNum, (t2.ClosestDt) from #Table1 t1 left join
#Table2 t2 on t1.DocNum=t2.DocNum and t2.ClosestDt > t1.JoiningDt
我也尝试使用 rownum,但具有挑战性的部分是获取 id 2 的下一场比赛(8-apr 而不是 7-apr),因为 07-Apr 已被 Id 1 占用。
您可以使用相关子查询,您可以在其中选择最近的日期。
取决于数据库系统,您是否也可以应用CROSS APPLY
SELECT t1.ID, t1.JoiningDt, t1.DocNum,
(SELECT ClosestDt FROM Table2 WHERE DocNum = t1.DocNum AND ClosestDt > t1.JoiningDt ORDER ClosestDt DESC BY LIMIT 1 ) ClosestDt
FROM Table1 t1