根据日期和关键字段合并两个表

Posted

技术标签:

【中文标题】根据日期和关键字段合并两个表【英文标题】:Merge two table based on date and key fields 【发布时间】:2020-06-22 16:05:34 【问题描述】:

我有两个带有 version_start 和 version_end 日期的表。我想合并这些表,如下例所示。

表 1

VERSION_START_DT    VERSION_END_DT  KEY ATTR1   
6/2/2020            6/16/2020       123  A  
6/17/2020           12/31/2022      123  B  
                

表 2

VERSION_START_DT    VERSION_END_DT  KEY ATTR2   
6/11/2020           12/31/2023      123  C  
            

输出应该是不重叠的版本日期及其相应属性的值

VERSION_START_DT    VERSION_END_DT  KEY ATTR1   ATTR2
6/2/2020            6/10/2020       123   A     NULL
6/11/2020           6/16/2020       123   A     C
6/17/2020           12/31/2022      123   B     C
01/01/2023          12/31/2023      123   NULL  C

【问题讨论】:

mysql 还是 oracle?选一个! 欢迎来到 SO。请看:Why should I provide an MCRE for what seems to me to be a very simple SQL query? 我最近在similiar question 上回答。在这里,您不需要填补空白,但您需要两个表中的属性。这是给甲骨文的。请说明您使用的是 MySQL 还是 Oracle。 如果是 Oracle this dbfiddle 应该有帮助。 【参考方案1】:

请尝试这样的事情

SELECT version_start.VERSION_START_DT , version_end.VERSION_END_DT, version_start.KEY
FROM Orders
INNER JOIN version_end ON version_start.ATTR1=version_end.ATTR2;

教程https://www.w3schools.com/sql/sql_join.asp

或者这个请复制粘贴一般查询,然后按年编辑查询

选择 version_start.VERSION_START_DT、version_end.VERSION_END_DT 从订单 INNER JOIN version_end ON version_start.VERSION_START_DT = version_end.VERSION_END_DT;

你可以试试这样的

【讨论】:

SELECT version_start.VERSION_START_DT , version_end.VERSION_END_DT, version_start.KEY FROM version_start INNER JOIN version_end ON version_start.ATTR1=version_end.ATTR2; 不要只是发布代码,解释它在做什么以及为什么。 但一般来说,我们避免回答要求我们为其编写基本代码的问题。他们应该尝试自己解决问题,然后我们帮助他们解决问题。 不要将代码放入 cmets。如果您需要更正答案,请点击edit 链接。 将解释放在答案中,而不是 cmets。

以上是关于根据日期和关键字段合并两个表的主要内容,如果未能解决你的问题,请参考以下文章

kettle 合并记录步骤中的 关键字段和 比较字段的说明

kettle合并记录 新旧表明明关键字段id一致结果老数据标记删除,新数据标记插入,求解

MySQL数据表合并(两表字段相同)以及数据去重(抄)

根据不匹配的日期字段连接两个表

根据最接近的日期时间合并两个数据框

SQL语句对某字段去重?