/*******************************************************************************
*******************************************************************************
* - SQL example for Loading an unitemporal Satellite.
* - See disclaimer.md in the repository root.
******************************************************************************/
INSERT INTO [Sat Customer]
[State_Before_Timestamp],
compacting_selection.[CUSTOMER_SK],
compacting_selection.[Inscription_Timestamp],
compacting_selection.[Inscription_Record_Id],
compacting_selection.[State_From_Timestamp],
compacting_selection.[State_Before_Timestamp],
compacting_selection.[Change_Data_Indicator],
compacting_selection.[Checksum],
Compacting_selection.[Audit_Trail_Id],
compacting_selection.[CUSTOMER_FIRST_NAME],
compacting_selection.[CUSTOMER_DATE_OF_BIRTH],
PARTITION BY compacting_selection.[CUSTOMER_SK]
ORDER BY compacting_selection.[CUSTOMER_SK],
compacting_selection.[Inscription_Timestamp],
compacting_selection.[Inscription_Record_Id]
) AS INT) AS KEY_ROW_NUMBER,
target_object.[Checksum] AS [Lookup_Checksum],
target_object.[Change_Data_Indicator] AS [Lookup_Change_Data_Indicator]
LEFT OUTER JOIN [Sat Customer] target_object
ON compacting_selection.[CUSTOMER_SK] = target_object.[CUSTOMER_SK]
AND compacting_selection.[Inscription_Timestamp] = target_object.[Inscription_Timestamp]
AND compacting_selection.[Inscription_Record_Id] = target_object.[Inscription_Record_Id]
WHERE satellite.[CUSTOMER_SK] IS NULL
AND (( [Checksum] != [Lookup_Checksum] )
-- The checksums are different
OR ( [Checksum] = [Lookup_Checksum]
AND [Change_Data_Indicator] != [Lookup_Change_Data_Indicator])
-- The checksums are the same but the CDC is different
-- It's not the most recent change in the set, so the record can be inserted as-is