SQL如何关联两表实现已匹配行不再参与后续匹配且按日期升序配对
实现方案
你需要的匹配逻辑可以通过分组加排序行号关联实现,核心逻辑是同order_code分组内,两张表各自按日期升序生成组内序号,再按order_code和序号关联,即可保证每行仅匹配一次,完全符合你的要求。
以下是支持窗口函数的主流数据库(MySQL 8.0+、PostgreSQL、Oracle等)的实现代码:
WITH t1_with_rn AS ( SELECT PK1, order_code, Date1, -- 同order_code分组按Date1升序生成行号 ROW_NUMBER() OVER (PARTITION BY order_code ORDER BY Date1 ASC) AS group_rn FROM 表1 ), t2_with_rn AS ( SELECT PK2, order_code, Date2, -- 同order_code分组按Date2升序生成行号 ROW_NUMBER() OVER (PARTITION BY order_code ORDER BY Date2 ASC) AS group_rn FROM 表2 ) SELECT t1.PK1, t1.order_code, t1.Date1, t2.PK2, t2.order_code, t2.Date2 FROM t1_with_rn t1 INNER JOIN t2_with_rn t2 ON t1.order_code = t2.order_code AND t1.group_rn = t2.group_rn ORDER BY t1.PK1 ASC;
上述代码执行后的输出和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者fault_final
相关产品推荐
相关产品推荐

