在日期时间创建的记录上加入两个记录表 - SQL

Joining two record tables on record created on date time - SQL

我正在尝试连接(完全外部连接)两条记录或历史 table,其中包含有关客户端状态的信息。每条记录都有创建记录时的日期时间字段,以及新旧状态。

Table一个

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

TableB

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

我想要的结果是一条记录 table,其中包含每个日期时间的所有状态更改。

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

然而,我的查询结果,returns a table 没有来自 Table 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'
JOIN C
 ON A.ID = C.ID
WHERE C = '10001'

问题应该出在这种情况下。检查此地点的加入条件。

问题是 JOIN 条件,因为使用 FULL JOIN 你可以在 Table A

ID 中有 NULL

可以使用这个JOIN条件来解决问题

JOIN C ON ISNULL(A.ID, B.ID) = C.ID
WHERE C = '10001'