|
<< Click to Display Table of Contents >> Bruger-SQL eksempel |
![]() ![]()
|
Her ses et eksempel på hvordan man finder de diagnosekoder, der er tilført diagnoselisten inden for de sidste 2 år, og som ikke blot er erstatning af tidligere koder med justeringer af tekst eller andre felter for samme kodenummer.
Udtrykket illusterer hvordan man i samme kørsel med forskellige kriterier kan foretage to successive udtræk på samme tabel SKScomplete for derefter at få sit endelige resultat ved at matche disse to udtræk over for hinanden ved at lade det andet udtræk stille en betingelse for forekomst (eller ikke-forekomst) i det første udtræk, der er mellelagret i den temporære tabel Temp.
For de felter (her kun feltet SKSkode), der optræder i begge udtræk, er det nødvendigt når udtrækkene samkøres, at differentiere om der menes SKSkode fra det første eller andet undtræk og her specificeret med de arbitrært valgte tabel alias-navne mt og sks.
/* Diagnosekoder nyoprettede inden for de sidste 2 år,
DROP TABLE IF EXISTS SKStemp; CREATE TEMPORARY TABLE SKStemp AS FROM SKScomplete WHERE DatoSlut < CURRENT_DATE ;
SELECT sks.* FROM SKScomplete AS sks LEFT JOIN SKStemp AS mt ON sks.SKSkode = mt.SKSkode WHERE JULIANDAY(DatoIKraft) > (JULIANDAY(CURRENT_DATE) - 365*2) AND Kat = 'dia' AND DatoSlut > CURRENT_DATE AND mt.SKSkode IS NULL ORDER BY sks.Kat ; |
•Første linie (her grøn) er inaktiv som kode ved at være omkranset af /* */ men giver en god beskrivelse af udtrykkets funktion, der kan være nyttigt som dokumentation eller for en selv ved senere genfremhentning af udtrykket.
•Øverste deludtryk (her blåt), der kun trækker på feltet SKSkode, finder de SKS-koder, der med tilhørende Kodetekst er udgåede ved at DatoSlut < NOW, dvs. slutdatoen ligger før nutid.
oFor ikke unødig at lagre resultatet på disk-plads, lægges resultatet blot i computerens hukommelse (TEMPORARY TABLE) med tabelnavnet SKStemp.
•Nederste deludtryk (her rødt) finder (SELECT sks.*) alle datafelter fra tabel-trækket SKScomplete AS sks, for de poster der er nugældende, dvs. har udløbsdato ud i fremtiden med DatoSlut > CURRENT_DATE.
Ved specifikt kun at medtage den venstre side (sks.*) af JOIN relationen undgår man at få vist den tomme kolonne (mt.SKSkode) fra den højre side af JOIN-relationen, som kun bruges til filtrering på at feltindholdet netop NULL (tomt).
oData hentes fra tabellen SKScomplete, der, for længere nede i udstrykket at adskille data trukket fra det første udtryk, hér tildeles et alias sks som i
FROM SKScomplete AS sks.
oDette sekundære udtræk matches (LEFT JOIN) med det første udtræk (SKStemp AS mt), hvor match betinges at være på feltet SKSkode i hvert af de to udtræk: sks.SKSkode = mt.SKSkode.
oEt LEFT JOIN går ud på, at alle poster i tabellen (SKScomplete AS sks) til venstre for JOIN-udsagnet skal medtages, og at tomme data tillades fra den tabel (MEMORY Temp) , der står til højre for JOIN-udsagnet.
oDernæst afgrænses til kodekataloget for diagnoser med Kat = 'dia'.
oHerefter tilføjes betingelsen at kodens ikraftrædelse har været inden for de sidste to år med
JULIANDAY(DatoIKraft) > (JULIANDAY(CURRENT_DATE) - 365*2).
Bemærk den nødvendige konvertering med JULIANDAY() på begge datoer, da dato-værdien til højre manipuleres aritmetrisk.
oEndelig vises i det finale resultat kun de poster i det sekundære udtræk, hvor SKSkode ikke findes (mt.SKSkode IS NULL) i det primære udtræk, som netop kun indeholdt udgåede koder (DatoSlut < CURRENT_DATE).
oDen temporære tabel SKStemp (oprettet som TEMPORARY TABLE) forsvinder, så snart programmet lukkes.
Eksemplet kan naturligvis kopieres herfra og ind i programmet og med de tilpasninger du måtte ønske - f.eks. justering af tidsvinduet tilbage i tiden (JULIANDAY(CURRENT_DATE) - 365*2) hvor 2 her angiver 2 år tilbage i tiden fra nutid (CURRENT_DATE).
Se også JULIANDAY.
__________________________