Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Cachen indlæses ved kald til "/reload" som beskrevet i driftsvejledningen. Følgende query danner grundlag for at fylde cachen med entiteter fra tabellen SOR2SorEntity. En tilsvarende query er lavet til at indlæse fra SOR2SorShakMap.

Code Block
languagesql
linenumberstrue
SELECT t1.ValidFrom, t1.FromDate, t1.ToDate, t1.SorId, t1.ParentSorId, t1.HealthInstitutionSorId,
        t1.ProviderId, t1.ShakId, t1.EntityName, t1.InstitutionOwnerSorId,
          t1.InstitutionOwnerCvrNumberId, t1.EntityTypeId, t1.EntityTypeName
FROM SOR2SorEntity t1
JOIN (
        SELECT UniqueCurrentKey, MAX(ValidFrom) as MaxValidFrom
        FROM SOR2SorEntity
        WHERE FromDate >= :date_interval
        OR (FromDate = 
                (
 	                SELECT MAX(FromDate)
                	FROM SOR2SorEntity t3
                	WHERE t3.SorId = SOR2SorEntity.SorId
                ) 
                AND ToDate is NULL
        )
        GROUP BY UniqueCurrentKey
) t2 ON t1.UniqueCurrentKey = t2.UniqueCurrentKey AND t1.ValidFrom = t2.MaxValidFrom
;

Parameteren ":date_interval" (linje 8) udfyldes med property "sores.retention.period" som beskrevet i driftsvejledningen.

Indlæsning foregår som et join på SOR2SorEntity fra sig selv. En central del af denne join er følgende:

Der skal vælges de rækker, hvor der for hver gruppering på nøglen UniqueCurrentKey, kun vælge dén række, der har den nyeste ValidFrom (date). 

UniqueCurrentKey er en sammensat nøgle, som består af <SorId, FromDate>. Dette er ikke en unik nøgle, da der kan forekomme adskillige rækker af disse. Men ovenstående join vælges kun dén af de rækker, som har nyeste ValidFrom.

FromDate er den forretningsmæssige startdato for hvornår er række er gyldig. Denne kan adskille sig fra indlæsningstidpunktet (hvornår SOR2-importeren har indlæst pågældende data), og ValidFrom benævnes derfor den tekniske fra-dato, som er sat af importeren. Er der flere rækker med samme SorId og FromDate, bruges derfor ValidFrom til at vælge den række, der aktuelt er gyldig på den FromDate for den SorId.

Bemærk, at der i JOIN-betingelsen også forekommer en  "OR (FromDate =" (linje 9). Dette skyldes, at vi ud over historikken for det angivne dato-interval, også har behov for at sikre os, at seneste gyldige SorEntity - uanset FromDate - også altid er med i indlæsningen. Som eksempel kunne man forestille sig en SorEntity, hvor seneste FromDate lå tre år tilbage, og derfor vil den ikke ligge inden for "FromDate >= :date_interval", hvis ":date_interval" kun var to år. Til den inderste query tilføjes "AND ToDate is NULL", da en SorEntity med start udenfor intervallet kun har relevans, hvis den stadig er aktiv. Her kunne man også overveje at sætte den sidste betingelse til "AND (ToDate is NULL OR ToDate > NOW())", for at få dem der stadig er aktive, der ikke har været ændret i perioden. I praksis har det dog givet det samme antal rækker på produktionsdata, men med ringere indlæsningsperformance, så det er fravalgt i den nuværende version.