Как найти отличия в содержательной таблице SQL - PullRequest
0 голосов
/ 14 декабря 2018

Я хотел бы найти записи, отличающиеся друг от друга, основанные на разных наборах данных в одной и той же таблице, которые загружаются в другую дату.Таким образом, если один или несколько атрибутов (кроме ключа) отличаются друг от друга из набора данных x, загруженного 1-1-2018, и набора данных y, загруженного 31-12-2018.Как мне добиться этого в SQL?

Ключ, по которому следует выполнить сравнение, - это ZIP_CODE + House_ID

Привет,

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Простой способ сравнения наборов -

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, вам нужно добавить дополнительные проверки условий для , один из обоих столбцов равен NULL .Конечно, этот синтаксис сравнения может быть автоматически создан с использованием существующих метаданных ....

0 голосов
/ 14 декабря 2018

Вы можете получить предыдущий почтовый индекс по 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;
...