如何在内容表SQL中查找差异

时间:2018-12-14 09:30:13

标签: sql database data-warehouse

我想根据同一表中不同的数据集找到彼此不同的记录,这些记录在不同的日期加载。 因此,如果一个或多个属性(除键之外)彼此不同,则与2018年1月1日加载的数据集x和2018年12月31日加载的数据集y互不相同。 如何在SQL中实现此目标?

进行比较的键是ZIP_CODE + House_ID

问候,

2 个答案:

答案 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 。当然,可以使用现有的元数据自动创建此比较语法。...