在日期时间创建的记录上连接两个记录表 - SQL
Posted
技术标签:
【中文标题】在日期时间创建的记录上连接两个记录表 - SQL【英文标题】:Joining two record tables on record created on date time - SQL 【发布时间】:2021-07-26 12:37:36 【问题描述】:我正在尝试连接(完全外连接)两个包含客户状态信息的记录或历史表。每条记录都有一个创建记录时的日期时间字段,以及新旧状态。
表 A
ID | A CreatedOn | A Status OLD | A Status NEW |
---|---|---|---|
10001 | 2/05/2021 12:00:00 | NULL | Hungry |
10001 | 3/05/2021 12:00:00 | Hungry | Sad |
表 B
ID | B CreatedOn | B Status OLD | B Status NEW |
---|---|---|---|
10001 | 2/05/2021 12:00:00 | NULL | Active |
10001 | 4/05/2021 12:00:00 | Active | Inactive |
我想要的结果是一个记录表,其中包含每个日期时间的所有状态变化。
A CreatedOn | A Status OLD | A Status NEW | B CreatedOn | B Status OLD | B Status NEW |
---|---|---|---|---|---|
2/05/2021 12:00:00 | NULL | Hungry | 2/05/2021 12:00:00 | NULL | Active |
3/05/2021 12:00:00 | Hungry | Sad | NULL | NULL | NULL |
NULL | NULL | NULL | 4/05/2021 12:00:00 | Active | Inactive |
然而,我的查询结果返回一个没有表 B 中最后一条记录的表
A CreatedOn | A Status OLD | A Status NEW | B CreatedOn | B Status OLD | B Status NEW |
---|---|---|---|---|---|
2/05/2021 12:00:00 | NULL | Hungry | 2/05/2021 12:00:00 | NULL | Active |
3/05/2021 12:00:00 | Hungry | Sad | NULL | NULL | NULL |
我所拥有的并不复杂......但我不知道为什么它不起作用。
SELECT *
FROM A
FULL OUTER JOIN B
ON A.A_CreatedOn = B.B_CreatedOn
我的完整查询与此类似
SELECT
[A_CreatedOn]
,[Status A OLD]
,[Status A NEW]
,[B_CreatedOn]
,[Status B OLD]
,[Status B NEW]
FROM A
FULL OUTER JOIN B
ON A.A_CreatedOn = B.B_CreatedOn
JOIN C
ON A.ID = C.ID
WHERE C = '10001'
【问题讨论】:
not working
是什么?你的查询结果是什么?两个表中的CreatedOn
日期是否完全相同,直到毫秒?
刚刚编辑了问题。我没有从表 B 中获得最后一条记录
请不要在图片中显示结构和数据。
该查询没有问题。它应该返回预期的结果。见dbfillde。您是否发布了完整的查询?
A.ID = C.ID
明确排除 null A.ID
【参考方案1】:
JOIN C
ON A.ID = C.ID
WHERE C = '10001'
问题应该出在这种情况下。检查此地点的加入条件。
【讨论】:
谢谢。知道了。JOIN C ON A.ID = C.ID OR B.ID = C.ID WHERE C = '10001'
如果你需要匹配两个表中的ID
,为什么不把它放在FULL OUTER JOIN
条件中呢? ON A.A_CreatedOn = B.B_CreatedOn AND A.ID = B.ID
【参考方案2】:
问题在于JOIN
条件,因为使用FULL JOIN
您可以在ID
的Table A
中拥有NULL
你可以使用这个JOIN条件来解决问题
JOIN C ON ISNULL(A.ID, B.ID) = C.ID
WHERE C = '10001'
【讨论】:
以上是关于在日期时间创建的记录上连接两个记录表 - SQL的主要内容,如果未能解决你的问题,请参考以下文章
Oracle/SQL:将日期和时间连接成单个日期值时的数字格式模型无效