我想根据同一表中不同的数据集找到彼此不同的记录,这些记录在不同的日期加载。 因此,如果一个或多个属性(除键之外)彼此不同,则与2018年1月1日加载的数据集x和2018年12月31日加载的数据集y互不相同。 如何在SQL中实现此目标?
进行比较的键是ZIP_CODE + House_ID
问候,
答案 0 :(得分:0)
您可以通过LAG获取以前的邮政编码
SELECT ZipCode, HouseId,
LAG(ZipCode, 1,0) OVER (ORDER BY LoadDate) AS ZipCodeMinus1,
LAG(HouseId, 1,0) OVER (ORDER BY LoadDate) AS HouseIdMinus11
FROM Addresses;
答案 1 :(得分:0)
比较集的简单方法是
select ... a
EXCEPT
select ... b
但是您需要另一个
select ... b
EXCEPT
select ... a
这并不能告诉您哪些列不同。
或者您使用full outer join
:
select
coalesce(a.ZIP_CODE, b.ZIP_CODE)
,coalesce(a.House_ID, b.House_ID)
,case when a.col1 <> b.col then 'a: || a.col1 || ' b:' || b.col1 end
...
from
( select ....) as a
full join
( select ....) as b
on a.ZIP_CODE = b.ZIP_CODE
and a.House_ID = b.House_ID
and ( a.col1 <> a.col1 or
a.col2 <> a.col2 or
a.col3 <> a.col3 or
...
)
如果列可为空,则需要添加更多条件,以检查两列中的一个是否为NULL 。当然,可以使用现有的元数据自动创建此比较语法。...