--> 2. Teil
drop table if exists tempAlleLaborWerteTable;
create temporary table tempAlleLaborWerteTable as
select TB.patient_ident as patientID,
T.testident as kuerzel,
T.ergebniswert,
T.ergebnistexte,
TB.berichtsdatum
from tempNeededWerteLaborAbfrageTable TTT
join lb820x TB
on (TB.patient_ident = TTT. patientID)
join LB820X_lbtest JTT
on (JTT.lb820X_ident = TB.ident)
join lbtestlbanforderung T
on (T.ident = JTT.lbtest_ident and TTT.kuerzel = T.testident)
order by TB.patient_ident, T.testident, TB.berichtsdatum desc, TB.eingangsdatumlabor desc, T.ident desc;
-- die Spalte ‚neuesterWert‘ füllen
do $$
declare
row record;
_lastPat bigint;
_lastTestIdent text;
_currentPat bigint;
_currentTestIdent text;
_currentWert real;
_currentErgebnisText text;
_currentTimeStamp timestamp;
begin
_lastPat := -1;
_lastTestIdent := 'ZS_XXX';
for row in
select ctid, * from tempAlleLaborWerteTable
for update loop
_currentPat := row.patientID;
_currentTestIdent := row.kuerzel;
if (_currentPat <> _lastPat or _currentTestIdent <> _lastTestIdent) then
-- RAISE NOTICE 'Neuer Block';
_lastPat = _currentPat;
_lastTestIdent := _currentTestIdent;
_currentWert := row.ergebniswert;
_currentErgebnisText := row.ergebnistexte;
_currentTimeStamp := row.berichtsdatum;
update tempLaborAbfrageTable TT set datum_neuester_Wert = _currentTimeStamp,
neuester_wert = _currentWert ,
neuester_Ergebnistext = _currentErgebnisText
where (TT. patientID = _lastPat and TT.kuerzel = _lastTestIdent);
end if;
-- RAISE NOTICE 'Processing current_pat: % current_text: %', _currentPat, _currentTestIdent;
end loop;
end;
$$;
select
TT.berichtsdatum,
TT.patientID,
TT.nachname,
TT.vorname,
TT.kuerzel,
TT.testbezeichnung as bezeichnung,
TT.ergebniswert,
TT.einheit,
TT.ergebnistexte,
TT.normalwertuntergrenze as norm_untergrenze,
TT.normalwertobergrenze as norm_obergrenze,
TT.grenzwertindikator,
TT.normwerttexte,
TT.datum_neuester_Wert,
TT.neuester_Wert,
TT.neuester_Ergebnistext,
TT.anforderungsident as anforderungsident,
CASE WHEN TT.befundart ilike 'E%' THEN 'Endbefund'
WHEN TT.befundart ilike 'V%' THEN 'Vorbefund'
WHEN TT.befundart ilike 'T%' THEN 'Teilbefund'
WHEN TT.befundart ilike 'N%' THEN 'Nachtrag'
WHEN TT.befundart ilike 'A%' THEN 'Archiv' ELSE TT.befundart END as befundart,
TT.jokerfeld as freitext,
TT.diagnosetexte,
TT.auftragsbezogeneHinweise,
TT.bereitsgesehen as gelesen,
CASE WHEN TT.teststatus ilike 'B%' THEN 'bereits berichtet'
WHEN TT.teststatus ilike 'K%' THEN 'korrigierter Wert'
WHEN TT.teststatus ilike 'F%' THEN 'folgt/fehlt'
ELSE TT.teststatus END as status,
TT.probenmaterialindex as material_kuerzel,
TT.probenmaterialBezeichnung as material,
CASE WHEN TT.abrechnungstyp ilike 'K%' THEN 'Kasse'
WHEN TT.abrechnungstyp ilike 'P%' THEN 'Vorbefund'
WHEN TT.abrechnungstyp ilike 'X%' THEN 'Andere'
WHEN TT.abrechnungstyp ilike 'N%' THEN 'Einsender persönlich'
ELSE TT.abrechnungstyp END as abrechnungstyp,
TT.testbezogeneHinweise,
TT.anforderungen,
TT.eingangsdatumLabor,
TT.abnahmedatum,
TT.titel,
TT.geburtsdatum,
KE.datum as datumKartei,
KE.text as textKartei,
KE.ident as karteieintragID,
TT.erstaufnahme,
TT.anforderer,
TT.auftrag
from tempLaborAbfrageTable TT
left join Karteieintrag KE
on (KE.laborauftrag_ident = TT. LaborauftragIdent)
where
<ZS:queryParameterSelectionGeloeschte> SELECTION;2; Umgang mit gelöschten Einträgen (bitte nur im Zusammenhang mit zeitlicher Einschränkung benutzen!); nur sichtbare anzeigen; TT.TBremoved = false AND TT.LAremoved = false AND KE.visible = true AND; nur gelöschte anzeigen; (TT.TBremoved = true OR TT.LAremoved = true OR KE.visible = false) AND</ZS>
true
order by TT.patientid, TT.kuerzel, TT.berichtsdatum desc;