| /* Slet (prune) rækker i PersonBeskyttelse som har FraDato >= Tidligste START_DT_BESKYTTELSE i data som skal indlæses*/
DELETE pb
FROM $$EDW_DATABASE.dbo.PersonBeskyttelse pb
inner hash join $$EDW_DATABASE.maps.Person p on p.SYS_BusinessKeyID=pb.FK_Person_BK_Person
inner hash join (
SELECT
RN = ROW_NUMBER() OVER (PARTITION BY PNR ORDER BY SYS_ExtractDate DESC, START_DT_BESKYTTELSE ASC)
, PNR, START_DT_BESKYTTELSE, SYS_ExtractDate
FROM $$DSA_DATABASE.dbo.DSA_P12XXX_Beskyttelse
WHERE $$DSA_DATABASE.dbo.DSA_P12XXX_Beskyttelse.BESKYTTYPE = 1
AND DSA_P12XXX_Beskyttelse.[SYS_BatchDate] = @batchdate
) DSA_PersonBeskyttelse ON p.Personnummer=DSA_PersonBeskyttelse.PNR
WHERE DSA_PersonBeskyttelse.RN = 1
and pb.FraDato >= DSA_PersonBeskyttelse.START_DT_BESKYTTELSE
;
/* Opdater PersonBeskyttelse.TilDato, hvis den ligger efter ny START_DT_BESKYTTELSE*/
UPDATE pb
SET pb.TilDato=DSA_PersonBeskyttelse.START_DT_BESKYTTELSE
FROM $$EDW_DATABASE.dbo.PersonBeskyttelse pb
inner join $$EDW_DATABASE.maps.Person p on p.SYS_BusinessKeyID=pb.FK_Person_BK_Person
inner join (
select FK_Person_BK_Person, MAX(TilDato) MaxTilDato
FROM $$EDW_DATABASE.dbo.PersonBeskyttelse
group by FK_Person_BK_Person
) PbMaxTilDato on PbMaxTilDato.FK_Person_BK_Person=pb.FK_Person_BK_Person and PbMaxTilDato.MaxTilDato=pb.TilDato
inner join (
SELECT
RN = ROW_NUMBER() OVER (PARTITION BY PNR ORDER BY SYS_ExtractDate DESC, START_DT_BESKYTTELSE ASC)
, PNR, START_DT_BESKYTTELSE, SYS_ExtractDate
FROM $$DSA_DATABASE.dbo.DSA_P12XXX_Beskyttelse
WHERE $$DSA_DATABASE.dbo.DSA_P12XXX_Beskyttelse.BESKYTTYPE = 1
AND DSA_P12XXX_Beskyttelse.[SYS_BatchDate] = @batchdate
) DSA_PersonBeskyttelse ON DSA_PersonBeskyttelse.PNR=p.Personnummer and DSA_PersonBeskyttelse.START_DT_BESKYTTELSE <= PbMaxTilDato.MaxTilDato
WHERE DSA_PersonBeskyttelse.RN = 1
; |