Calcolo automatico GFR_CKD-EPI
3 partecipanti
Calcolo automatico GFR_CKD-EPI
Chiedo ai colleghi esperti se è possibile, partendo dai pazienti che hanno la registrazione della creatinina in cartella, avere una query che calcola in automatico il GFR secondo CKD-EPI e stampare un file con Cognome e nome, età, creatinina con ultima data, valore del GFR secondo CKD-EPI.
Re: Calcolo automatico GFR_CKD-EPI
almeno in Teoria Si ma in pratica la Richiesta diventa .. complessa da soddisfare :drtulino ha scritto:Chiedo ai colleghi esperti se è possibile, partendo dai pazienti che hanno la registrazione della creatinina in cartella, avere una query che calcola in automatico il GFR secondo CKD-EPI e stampare un file con Cognome e nome, età, creatinina con ultima data, valore del GFR secondo CKD-EPI.
1- innanzitutto nel Mille.db non vi è in campo ove registrare alcuni caratteri del Fenotipo ( Colore della Pelle ad es. , come sarebbe necessario in questo caso ) ;
2- inoltre la formula x eseguire il calcolo deve eseguire tre operazioni di Elevamento a Potenza e quindi la query appesantisce notevolmente il motore di ricerca con tempi biblici di esecuzione ;
3- ho utilizzato il metodo consigliato x eseguire una estrazione complessa in postgres ( partendo dalle pre-estrazioni utilizzando WITH ) : ma credo che con l' attuale versione di MU / MW ( incredibilmente ) non funzioni ; in tal caso non resta che utilizzare pgAdmin
WITH paz ( codice , sesso , paziente , nascita , eta , nato_a , prov_nasc , nato_a_cod , nato_a_cat ) AS ( SELECT p.codice , p.sesso , Cast( p.cognome As Char(16)) || ' ' || p.nome , p.nascita , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , p.comune_di_nascita , p.provincia_nascita , p.codice_comune_nasc , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN users u ON n.pa_medi = u.userid WHERE u.codice_regionale ILIKE '%' AND u.nomeuser ILIKE '%' AND p.pa_convenzione = 'S' AND Year( p.nascita) Between 1910 AND 2000 AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today() AND n.motivo_revoca = 'S' )) AND p.decesso Is Null ) ,
creatin ( codice , creat_d , creat_v ) AS ( Select codice , a.data_open , To_Number( a.ac_val , '9999D99' ) From cart_accert a Where a.codice IN ( Select codice From paz ) And ( a.ac_des ILike 'Creatinina' And a.data_open < Today()+1 And Ascii( a.ac_val ) Between 48 And 57 ) And Not Exists ( Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.ac_des ILike 'Creatinina' And (a1.data_open > a.data_open Or ( a1.data_open=a.data_open And a1.rowid>a.rowid )) And a1.ac_val Is Not Null )) ,
ckd_epi ( codice , ckd_d , ckd_v ) AS ( Select codice , a.data_open , To_Number( a.ac_val , '9999D99' ) From cart_accert a Where a.codice IN ( Select codice From paz ) And ( a.ac_des ILike '%Ckd%Epi%' And a.data_open < Today()+1 And Ascii( a.ac_val ) Between 48 And 57 ) And Not Exists ( Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.ac_des ILike '%Ckd%Epi%' And (a1.data_open > a.data_open Or ( a1.data_open=a.data_open And a1.rowid>a.rowid )) And a1.ac_val Is Not Null ))
SELECT paziente , sesso , nascita , eta , nato_a , prov_nasc , nato_a_cod , nato_a_cat ,
( SELECT creat_d FROM creatin a WHERE a.codice = p.codice ) AS creat_d ,
( SELECT creat_v FROM creatin a WHERE a.codice = p.codice ) AS creat_v ,
( SELECT ckd_d FROM ckd_epi a WHERE a.codice = p.codice ) AS ckd_d ,
( SELECT ckd_v FROM ckd_epi a WHERE a.codice = p.codice ) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141 * Power( CASE WHEN creat_v/0.7 < 1 THEN creat_v/0.7 ELSE 1.0 END , -0.329 ) * Power( CASE WHEN creat_v/0.7 > 1 THEN creat_v/0.7 ELSE 1.0 END , -1.209 ) * Power( 0.993 , eta ) *1.018 ELSE 141 * Power( CASE WHEN creat_v/0.9 < 1 THEN creat_v/0.9 ELSE 1.0 END , -0.411 ) * Power( CASE WHEN creat_v/0.9 > 1 THEN creat_v/0.9 ELSE 1.0 END , -1.209 ) * Power( 0.993 , eta ) END * CASE WHEN nato_a_cat = 'B' THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM paz p RIGHT JOIN creatin USING (codice ) ORDER BY 1 LIMIT 1500 OFFSET 0
Vanno adattate/modificate alcune clausole ( in primis : Codice Medico e/o Nome Utente , Codici Istat Paesi di Nascita , … )
Per Identifcare almeno in parte, i Pazienti con il Fenotipo della Pelle Nera , si puo' usare l' artifizio di analizzare dei Codici Istat ( al fine di selezionare quelli piu' adatti all' uopo ) , procedendo in tal modo : eseguire la query :
WITH paz ( codice , sesso , paziente , nascita , eta , nato_a , prov_nasc , nato_a_cod ) AS ( SELECT p.codice , p.sesso , Cast( p.cognome As Char(16)) || ' ' || p.nome , p.nascita , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , p.comune_di_nascita , p.provincia_nascita , p.codice_comune_nasc FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN users u ON n.pa_medi = u.userid WHERE u.codice_regionale ILIKE '%' AND u.nomeuser ILIKE '%' AND p.pa_convenzione = 'S' AND Year( p.nascita) Between 1910 AND 2000 AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today() AND n.motivo_revoca = 'S' )) AND p.decesso Is Null )
SELECT paziente , sesso , nascita , eta , nato_a , prov_nasc , nato_a_cod
FROM paz WHERE prov_nasc ILIKE 'EE' ORDER BY 7 , 1 LIMIT 1500 OFFSET 0
selezionare i Codici Istat dei Paesi di Nascita ritenuti piu' idonei ( ovviamente è un' approssimazione ) e verificare il risultato ad es. con :
WITH paz ( codice , sesso , paziente , nascita , eta , nato_a , prov_nasc , nato_a_cod ) AS ( SELECT p.codice , p.sesso , Cast( p.cognome As Char(16)) || ' ' || p.nome , p.nascita , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) As eta , p.comune_di_nascita , p.provincia_nascita , p.codice_comune_nasc FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN users u ON n.pa_medi = u.userid WHERE u.codice_regionale ILIKE '%' AND u.nomeuser ILIKE '%' AND p.pa_convenzione = 'S' AND Year( p.nascita) Between 1910 AND 2000 AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today() AND n.motivo_revoca = 'S' )) AND p.decesso Is Null )
SELECT paziente , sesso , nascita , eta , nato_a , prov_nasc , nato_a_cod
FROM paz WHERE nato_a_cod IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) ORDER BY 7 , 1 LIMIT 1500 OFFSET 0
Non ho ancora eseguito la query in modo esaustivo ma il CKD-Epi eGRF calcolato tramite Motore di Ricerca sembra presentare differenze marginali con la formula classica reperibile sul web ( ad es. http://www.touchcalc.com/calculators/epi ) oppure è solo un' illusione ?
Saluti Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Calcolo automatico GFR_CKD-EPI
Grazie Sergio del lavoro profuso. Purtroppo per me è difficile capire come posso aiutarti. Ho provato a lanciare la prima query e, come immaginavo da quanto hai detto, mi dà errore.
Rimango in attesa, fiducioso, di ulteriori sviluppi (in passato, impiegando Domeniche invernali, con Draghini si era fatto un lavoro magnifico con Access, ma adesso con postgresql quei file non sono più utilizzabili).
Rimango in attesa, fiducioso, di ulteriori sviluppi (in passato, impiegando Domeniche invernali, con Draghini si era fatto un lavoro magnifico con Access, ma adesso con postgresql quei file non sono più utilizzabili).
Re: Calcolo automatico GFR_CKD-EPI
Ho provato la query : sembra sorprendentemente performante ( ha estratto ~950 righe in 13 secondi da un MillePS.db MonoUtente relativamente integro , seppur utilizzando un PC relativamente datato ( del 2011 ) ; nelle ~ 350 righe di confronto, ho riscontrato differenze minime ma circa 30 con errori di digitazione dei dati nei campi Creatinina e CKD-Epi eGRF in MW ( v. 13.38 quindi old ), quindi ho potuto provvedere alla correzione delle anomalie .drtulino ha scritto:Grazie Sergio del lavoro profuso. Purtroppo per me è difficile capire come posso aiutarti. Ho provato a lanciare la prima query e, come immaginavo da quanto hai detto, mi dà errore.
Rimango in attesa, fiducioso, di ulteriori sviluppi (in passato, impiegando Domeniche invernali, con Draghini si era fatto un lavoro magnifico con Access, ma adesso con postgresql quei file non sono più utilizzabili).
Purtroppo posso solo suggerire di iniziare ad utilizzare pgAdminIII o pgAdmin 4 o pgAdmin 4 web ( purtroppo anche qui le versioni successive sono peggiorative come x MW ) e pensionare MilleUtilità almeno x le interrogazioni e le statistiche ( già a fine 2015 suggerivo lo switch … vedi post : https://utentimillewin.forumattivo.it/t1302-pgadmin-istruzioni-x-l-uso#8709 )
Purtroppo non sono in grado di traslare la query nel datato linguaggio SQL di MU , anche se basterebbe assai poco x aggiornarlo ma evidentemente non si vuole semplificare un po' la vita al povero MMG ( visto i software con cui siamo costretti ad interagire ) … ma neppure fare concorrenza a MilleGPG .
Ti saluto , Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Calcolo automatico GFR_CKD-EPI
Cervino ha scritto:Ho provato la query : sembra sorprendentemente performante ( ha estratto ~950 righe in 13 secondi da un MillePS.db MonoUtente relativamente integro , seppur utilizzando un PC relativamente datato ( del 2011 ) ; nelle ~ 350 righe di confronto, ho riscontrato differenze minime ma circa 30 con errori di digitazione dei dati nei campi Creatinina e CKD-Epi eGRF in MW ( v. 13.38 quindi old ), quindi ho potuto provvedere alla correzione delle anomalie .drtulino ha scritto:Grazie Sergio del lavoro profuso. Purtroppo per me è difficile capire come posso aiutarti. Ho provato a lanciare la prima query e, come immaginavo da quanto hai detto, mi dà errore.
Rimango in attesa, fiducioso, di ulteriori sviluppi (in passato, impiegando Domeniche invernali, con Draghini si era fatto un lavoro magnifico con Access, ma adesso con postgresql quei file non sono più utilizzabili).
Purtroppo posso solo suggerire di iniziare ad utilizzare pgAdminIII o pgAdmin 4 o pgAdmin 4 web ( purtroppo anche qui le versioni successive sono peggiorative come x MW ) e pensionare MilleUtilità almeno x le interrogazioni e le statistiche ( già a fine 2015 suggerivo lo switch … vedi post : https://utentimillewin.forumattivo.it/t1302-pgadmin-istruzioni-x-l-uso#8709 )
Purtroppo non sono in grado di traslare la query nel datato linguaggio SQL di MU , anche se basterebbe assai poco x aggiornarlo ma evidentemente non si vuole semplificare un po' la vita al povero MMG ( visto i software con cui siamo costretti ad interagire ) … ma neppure fare concorrenza a MilleGPG .
Ti saluto , Sergio
Grazie Sergio, per il solito lavoro di qualità che hai fatto. Appena avrò un po' di tempo cercherò di capirci qualcosa con pgAdmin. Intanto penso che per molti colleghi possa essere molto utile.
Re: Calcolo automatico GFR_CKD-EPI
Caro Renato ma a che ti serve?
1-Il CKD Epi è calcolabile all'interno della cartella del singolo paziente.
2-Ho notato che i valori stimati di clearance con i vari calcolatori (Cockroft MDRD) etc sono mooolto diversi dalla clearance della creatinina quando eseguita in laboratorio indicendo a provvedimenti clinici moolto diversi,
3-infine da SNLG :analisi basata su 12.000 soggetti inclusi in 26 studi trasversali e un ulteriore studio basato sulla coorte ARIC hanno mostrato che l'equazione CKD-EPI è superiore alla formula MDRD. Tali risultati indicano che la CKD-EPI è da preferire alla MDRD, particolarmente nel range di filtrato glomerulare >60 ml/min/1,73 m2 SC.
quindi potremmo contenterci in linea di massima di quello che ci offre la ditta.
... ma forse mi sfugge qualcosa
ciao
1-Il CKD Epi è calcolabile all'interno della cartella del singolo paziente.
2-Ho notato che i valori stimati di clearance con i vari calcolatori (Cockroft MDRD) etc sono mooolto diversi dalla clearance della creatinina quando eseguita in laboratorio indicendo a provvedimenti clinici moolto diversi,
3-infine da SNLG :analisi basata su 12.000 soggetti inclusi in 26 studi trasversali e un ulteriore studio basato sulla coorte ARIC hanno mostrato che l'equazione CKD-EPI è superiore alla formula MDRD. Tali risultati indicano che la CKD-EPI è da preferire alla MDRD, particolarmente nel range di filtrato glomerulare >60 ml/min/1,73 m2 SC.
quindi potremmo contenterci in linea di massima di quello che ci offre la ditta.
... ma forse mi sfugge qualcosa
ciao
LucaLeF- Membro Esperto
- Messaggi : 473
Punti : 5918
Voti per importanza dei messaggi : 11
Data d'iscrizione : 21.02.11
Re: Calcolo automatico GFR_CKD-EPI
LucaLeF ha scritto:Caro Renato ma a che ti serve?
1-Il CKD Epi è calcolabile all'interno della cartella del singolo paziente.
2-Ho notato che i valori stimati di clearance con i vari calcolatori (Cockroft MDRD) etc sono mooolto diversi dalla clearance della creatinina quando eseguita in laboratorio indicendo a provvedimenti clinici moolto diversi,
3-infine da SNLG :analisi basata su 12.000 soggetti inclusi in 26 studi trasversali e un ulteriore studio basato sulla coorte ARIC hanno mostrato che l'equazione CKD-EPI è superiore alla formula MDRD. Tali risultati indicano che la CKD-EPI è da preferire alla MDRD, particolarmente nel range di filtrato glomerulare >60 ml/min/1,73 m2 SC.
quindi potremmo contenterci in linea di massima di quello che ci offre la ditta.
... ma forse mi sfugge qualcosa
ciao
Luca io da anni calcolo il GFR con CKD-EPI e MDRD, quindi non serve a me. Ma chi non lo calcola lo deve fare paziente per paziente. Stiamo partendo con la Sanità d'Iniziativa e la stadiazione della IRC si farà con la CKD-EPI. Sarebbe sicuramente utile poter fare un calcolo della CKD-EPI con un'operazione di gruppo anziché paziente per paziente.
Re: Calcolo automatico GFR_CKD-EPI
Ho traslato con difficoltà la query nel desueto linguaggio SQL di MW-MU, ormai improponibile x calcoli e/o interrogazioni non elementari :
SELECT Cast( p.cognome As Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_d ,
( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_v ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_d ,
( SELECT To_Number( a.ac_val , '9999D9' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 < 1 THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -0.329 ) * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 > 1 THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -1.209 ) * Power( 0.993 , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) ) *1.018 ELSE 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 < 1 THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -0.411 ) * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 > 1 THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -1.209 ) * Power( 0.993 , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) ) END * CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 2000
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today()
AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
ORDER BY 1
Funzionerà ? saluti Sergio
SELECT Cast( p.cognome As Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_d ,
( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_v ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_d ,
( SELECT To_Number( a.ac_val , '9999D9' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 < 1 THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -0.329 ) * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 > 1 THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -1.209 ) * Power( 0.993 , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) ) *1.018 ELSE 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 < 1 THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -0.411 ) * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 > 1 THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -1.209 ) * Power( 0.993 , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) ) END * CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 2000
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today()
AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
ORDER BY 1
Funzionerà ? saluti Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Calcolo automatico GFR_CKD-EPI
Ciao Sergio, mi restituisce come errore: "zero elevato a potenza negativa non è definito". Comunque mi sembra un lavoro ciclopico. Grazie.Cervino ha scritto:Ho traslato con difficoltà la query nel desueto linguaggio SQL di MW-MU, ormai improponibile x calcoli e/o interrogazioni non elementari :
SELECT Cast( p.cognome As Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_d ,
( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_v ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_d ,
( SELECT To_Number( a.ac_val , '9999D9' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 < 1 THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -0.329 ) * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 > 1 THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -1.209 ) * Power( 0.993 , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) ) *1.018 ELSE 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 < 1 THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -0.411 ) * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 > 1 THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -1.209 ) * Power( 0.993 , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) ) END * CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 2000
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today()
AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
ORDER BY 1
Funzionerà ? saluti Sergio
Re: Calcolo automatico GFR_CKD-EPI
Sorprendente in quanto la formula stima il filtrato teorico in base a : età , sesso ed etnia , anche in assenza del valore di Creatinina ... Mistero … veramente arduo formulare .. ipotesi
Comunque quando una query non funziona , bisogna procedere a piccoli passi , provando con :
SELECT Cast( p.cognome As Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_d ,
( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_v ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_d
FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 2000
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today()
AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
ORDER BY 1
ed analizzare il set estratto alla ricerca di eventuali valori anomali di Creatinina poi provare con :
SELECT Cast( p.cognome As Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat ,
ROUND( CASE WHEN sesso = 'F' THEN 141 * Power( CASE
WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 < 1
THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -0.329 )
* Power( CASE
WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 > 1
THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) ) *1.018
ELSE 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 < 1
THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -0.411 )
* Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 > 1
THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) ) END
/* * CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 1.159 ELSE 1 END*/ , 0) AS ckd_epi
FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 1950
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today()
AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
ORDER BY 1
se l' errore persiste , eseguire parte della formula …. fammi sapere Ciao Sergio
Comunque quando una query non funziona , bisogna procedere a piccoli passi , provando con :
SELECT Cast( p.cognome As Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_d ,
( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_v ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_d
FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 2000
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today()
AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
ORDER BY 1
ed analizzare il set estratto alla ricerca di eventuali valori anomali di Creatinina poi provare con :
SELECT Cast( p.cognome As Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat ,
ROUND( CASE WHEN sesso = 'F' THEN 141 * Power( CASE
WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 < 1
THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -0.329 )
* Power( CASE
WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 > 1
THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) ) *1.018
ELSE 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 < 1
THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -0.411 )
* Power( CASE WHEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 > 1
THEN ( SELECT To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) ) END
/* * CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 1.159 ELSE 1 END*/ , 0) AS ckd_epi
FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 1950
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today()
AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
ORDER BY 1
se l' errore persiste , eseguire parte della formula …. fammi sapere Ciao Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Calcolo automatico GFR_CKD-EPI
Ciao Sergio,
la prima parte mi estrae la creatinina, anche se non capisco perché non estragga l'ultima eseguita e per alcuni pazienti non me la trova proprio (ho provato anche a cambiare il punto con la virgola nel valore), e mi dice la data in cui è stato calcolata l'ultima CKD-EPI (non mi riporta il valore). Non mi prende in considerazione il periodo impostato.
La seconda mi riporta il valore della CKD-EPI (penso) calcolato che è leggermente diverso dall'ultimo calcolato da Millewin. Non so quale dei due valori possa essere più attendibile.
Grazie
la prima parte mi estrae la creatinina, anche se non capisco perché non estragga l'ultima eseguita e per alcuni pazienti non me la trova proprio (ho provato anche a cambiare il punto con la virgola nel valore), e mi dice la data in cui è stato calcolata l'ultima CKD-EPI (non mi riporta il valore). Non mi prende in considerazione il periodo impostato.
La seconda mi riporta il valore della CKD-EPI (penso) calcolato che è leggermente diverso dall'ultimo calcolato da Millewin. Non so quale dei due valori possa essere più attendibile.
Grazie
Re: Calcolo automatico GFR_CKD-EPI
Ciao Renato ,drtulino ha scritto:Ciao Sergio,
la prima parte mi estrae la creatinina, anche se non capisco perché non estragga l'ultima eseguita e per alcuni pazienti non me la trova proprio (ho provato anche a cambiare il punto con la virgola nel valore), e mi dice la data in cui è stato calcolata l'ultima CKD-EPI (non mi riporta il valore). Non mi prende in considerazione il periodo impostato.
La seconda mi riporta il valore della CKD-EPI (penso) calcolato che è leggermente diverso dall'ultimo calcolato da Millewin. Non so quale dei due valori possa essere più attendibile.
Grazie
i risultati sono quelli attesi riguardo al CKD-Epi : ho dimenticato nello scomporre la query principale , di inserire la subquery relativa al valore di CKD-Epi eventualmente presente nel MillePS.db;
inoltre il valore calcolato differisce lievemente x 2 fattori : 1) x il livello di arrotondamento ( marginale ) e
2) nella formula che stiamo testando, viene presa l' età attuale del Paziente anzichè l' età effettiva al momento dell' Accertamento ed il divario si accentua lievemente x ogni anno in meno ( comunque resta marginale fino a 3 anni ) ; provvedero' alla modifica .
Tuttavia sorprende il problema da Te evidenziato riguardo alla subquery relativa alla Creatinina ( di tipo classico, ormai testata da anni e finora ha sempre ben funzionato almeno fino a MW v 13.38 ) che è poi quella che viene, non senza difficoltà, innestata ripetutamente nella complessa formula x il calcolo di CKD-Epi : non è sicuramente un problema di archiviazione del valore con il punto o la virgola in quanto la funzione To_Number serve proprio all' uopo : con SELECT To_Number( '0.75' , '99D99' ) oppure SELECT To_Number( '0,75' , '99D99' ) il set estratto non cambia ; comunque la finestra temporale va inserita all' interno di ogni subquery, se non erro; ad es :
( SELECT To_Number( a.ac_val , '9999D9' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 AND a.data_open > '2016-01-01' ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
Ti saluto , Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Calcolo automatico GFR_CKD-EPI
Ciao Sergio,Cervino ha scritto:
( SELECT To_Number( a.ac_val , '9999D9' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 AND a.data_open > '2016-01-01' ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
la sostituzione di questa subquery nella prima parte della query principale mi dà errore di sintassi. Forse sbaglio nel fare copia incolla?
Re: Calcolo automatico GFR_CKD-EPI
Prova con :drtulino ha scritto:la sostituzione di questa subquery nella prima parte della query principale mi dà errore di sintassi. Forse sbaglio nel fare copia incolla?Cervino ha scritto:( SELECT To_Number( a.ac_val , '9999D9' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 AND a.data_open > '2016-01-01' ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
Ciao Sergio,
SELECT Cast( p.cognome As Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_d ,
( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_v ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_d ,
( SELECT To_Number( a.ac_val , '9999D9' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 < 1
THEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -0.329 )
* Power( CASE WHEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 > 1
THEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Cast( Days( p.nascita , Today()+1)*24/8766 As SmallInt ) ) *1.018
ELSE 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 < 1
THEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -0.411 )
* Power( CASE WHEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 > 1
THEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days((SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) , Today()+1)*24/8766 ) END * CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 2000
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today()
AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
ORDER BY 1
Ti saluto Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Calcolo automatico GFR_CKD-EPI
Ciao Sergio, mi restituisce sempre, come errore: "zero elevato a potenza negativa non è definito".
Re: Calcolo automatico GFR_CKD-EPI
Ciao Renato , sembra un Mistero ... insoluble ; proverei con :drtulino ha scritto:Ciao Sergio, mi restituisce sempre, come errore: "zero elevato a potenza negativa non è definito".
SELECT Cast( p.cognome As Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , Cast( Days( p.nascita , a.data_open+1)*24/8766 AS SmallInt ) AS eta_cr , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat , a.data_open AS creat_d , To_Number( a.ac_val , '99D99' ) AS creat_v ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_d ,
( SELECT To_Number( a.ac_val , '9999D9' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141
* Power( CASE WHEN To_Number( a.ac_val , '99D99' )/0.7 BETWEEN 0.0001 AND 0.99999 THEN To_Number( a.ac_val , '99D99' )/0.7 ELSE 1.0 END , -0.329 )
* Power( CASE WHEN To_Number( a.ac_val , '99D99' )/0.7 > 1 THEN To_Number( a.ac_val , '99D99' )/0.7 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days( p.nascita , a.data_open+1)*24/8766 ) *1.018 ELSE 141
* Power( CASE WHEN To_Number( a.ac_val , '99D99' )/0.9 BETWEEN 0.0001 AND 0.99999 THEN To_Number( a.ac_val , '99D99' )/0.9 ELSE 1.0 END , -0.411 )
* Power( CASE WHEN To_Number( a.ac_val , '99D99' )/0.9 > 1 THEN To_Number( a.ac_val , '99D99' )/0.9 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days( p.nascita , a.data_open+1)*24/8766 ) END *
CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM (( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid ) RIGHT JOIN cart_accert a USING( codice)
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 2000
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today()
AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )
ORDER BY 1
oppure con ( ma in pratica dovrebbe essere solo una differenza di forma ) :
SELECT Cast( p.cognome As Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , Cast( Days( p.nascita , (SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )))*24/8766 As SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_d ,
( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_v ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_d ,
( SELECT To_Number( a.ac_val , '9999D9' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 BETWEEN 0.0001 AND 0.99999
THEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -0.329 )
* Power( CASE WHEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 > 1
THEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days( p.nascita , (SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )))*24/8766) *1.018
ELSE 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 BETWEEN 0.0001 AND 0.99999
THEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -0.411 )
* Power( CASE WHEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 > 1
THEN ( SELECT To_Number( a.ac_val , '99D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days( p.nascita , (SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) Between 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )))*24/8766) END
* CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 2000
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca Between Today()-365 AND Today()
AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
ORDER BY 1
Ti saluto , Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Calcolo automatico GFR_CKD-EPI
Ciao Sergio, funzionano tutte e due. Devo dire meglio la prima perché mi calcola il CKD-EPI solo quando trova il valore della creatinina. Che differenza c'è tra il valore della colonna CKD V e CKD epi?
Grazie per il grande lavoro che stai facendo.
Grazie per il grande lavoro che stai facendo.
Re: Calcolo automatico GFR_CKD-EPI
Ciao Renato , riassumo le 3 query per calcolare CKD-Epi eGRF con le condizioni di ricerca uniformate il massimo possibile , salvo errori o sviste : 1)drtulino ha scritto:Ciao Sergio, funzionano tutte e due. Devo dire meglio la prima perché mi calcola il CKD-EPI solo quando trova il valore della creatinina. Che differenza c'è tra il valore della colonna CKD V e CKD epi?
Grazie per il grande lavoro che stai facendo.
WITH paz ( codice , sesso , paziente , nascita , eta , nato_a , prov_nasc , nato_a_cod , nato_a_cat ) AS ( SELECT p.codice , p.sesso , CAST( p.cognome AS Char(16)) || ' ' || p.nome , p.nascita , CAST( Days( p.nascita , Today()+1)*24/8766 AS SmallInt ) AS eta , p.comune_di_nascita , p.provincia_nascita , p.codice_comune_nasc , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN users u ON n.pa_medi = u.userid WHERE u.codice_regionale ILIKE '%' AND u.nomeuser ILIKE '%' AND p.pa_convenzione = 'S' AND Year( p.nascita) BETWEEN 1910 AND 2000 AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca BETWEEN Today()-365 AND Today() AND n.motivo_revoca = 'S' )) AND p.decesso Is Null ) ,
creatin ( codice , creat_d , creat_v ) AS ( SELECT codice , a.data_open , To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice IN ( SELECT codice FROM paz ) AND ( a.ac_des ILIKE 'Creatinina' AND a.data_open < Today()+1 AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) ,
ckd_epi ( codice , ckd_d , ckd_v ) AS ( SELECT codice , a.data_open , To_Number( a.ac_val , '9999D99' ) FROM cart_accert a WHERE a.codice IN ( SELECT codice FROM paz ) AND ( a.ac_des ILIKE '%Ckd%Epi%' AND a.data_open < Today()+1 AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))
SELECT paziente , sesso , nascita , eta , nato_a , prov_nasc , nato_a_cod , nato_a_cat ,
( SELECT creat_d FROM creatin a WHERE a.codice = p.codice ) AS creat_d ,
( SELECT creat_v FROM creatin a WHERE a.codice = p.codice ) AS creat_v ,
( SELECT ckd_d FROM ckd_epi a WHERE a.codice = p.codice ) AS ckd_d ,
( SELECT ckd_v FROM ckd_epi a WHERE a.codice = p.codice ) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141 * Power( CASE WHEN creat_v/0.7 < 1 THEN creat_v/0.7 ELSE 1.0 END , -0.329 ) * Power( CASE WHEN creat_v/0.7 > 1 THEN creat_v/0.7 ELSE 1.0 END , -1.209 ) * Power( 0.993 , Days( p.nascita , creat_d+1)*24/8766 ) *1.018 ELSE 141 * Power( CASE WHEN creat_v/0.9 < 1 THEN creat_v/0.9 ELSE 1.0 END , -0.411 ) * Power( CASE WHEN creat_v/0.9 > 1 THEN creat_v/0.9 ELSE 1.0 END , -1.209 ) * Power( 0.993 , Days( p.nascita , creat_d+1)*24/8766 ) END * CASE WHEN nato_a_cat = 'B' THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM paz p RIGHT JOIN creatin a USING (codice ) ORDER BY 1 LIMIT 1500 OFFSET 0
2) :
SELECT CAST( p.cognome AS Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , CAST( Days( p.nascita , a.data_open+1)*24/8766 AS SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat , a.data_open AS creat_d , To_Number( a.ac_val , '999D99' ) AS creat_v ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_d ,
( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141
* Power( CASE WHEN To_Number( a.ac_val , '999D99' )/0.7 < 1 THEN To_Number( a.ac_val , '999D99' )/0.7 ELSE 1.0 END , -0.329 )
* Power( CASE WHEN To_Number( a.ac_val , '999D99' )/0.7 > 1 THEN To_Number( a.ac_val , '999D99' )/0.7 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days( p.nascita , a.data_open+1)*24/8766 ) *1.018 ELSE 141
* Power( CASE WHEN To_Number( a.ac_val , '999D99' )/0.9 < 1 THEN To_Number( a.ac_val , '999D99' )/0.9 ELSE 1.0 END , -0.411 )
* Power( CASE WHEN To_Number( a.ac_val , '999D99' )/0.9 > 1 THEN To_Number( a.ac_val , '999D99' )/0.9 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days( p.nascita , a.data_open+1)*24/8766 ) END *
CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM (( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid ) RIGHT JOIN cart_accert a USING( codice)
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 2000
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca BETWEEN Today()-365 AND Today()
AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )
ORDER BY 1
3)
SELECT CAST( p.cognome AS Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , CAST( Days( p.nascita , (SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )))*24/8766 AS SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_d ,
( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_v ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_d ,
( SELECT To_Number( a.ac_val , '9999D9' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 < 1
THEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -0.329 )
* Power( CASE WHEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 > 1
THEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days( p.nascita , (SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )))*24/8766) *1.018
ELSE 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 < 1
THEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -0.411 )
* Power( CASE WHEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 > 1
THEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days( p.nascita , (SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )))*24/8766) END
* CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 2000
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca BETWEEN Today()-365 AND Today() AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
AND p.codice IN ( SELECT codice FROM cart_accert WHERE ac_des ILIKE 'Creatinina' AND ac_val IS NOT NULL )
ORDER BY 1
alcune considerazioni : la n. 1 e 2 vengono eseguite velocemente ( quindi sono leggere x il motore di ricerca ~ 10-12 sec su un MillePS.db MonoUtente v.13.38 utilizzando un vecchio PC ) ;
la n. 3 è invece pesante ed impiega il triplo ( 32-33 sec ) x restituire i dati ( Mi sembrava di ricordare che utilizzando in modo sistematico le subquery , il risultato potesse essere piu' affidabile ( " blindato " ) ma forse non è sempre cosi … come in questo caso .
Le query ovviamente sono adattate al mio MillePS.db : in MU v13.38 è disponibile solo la vecchia ( indesiderata ) formula di Cockcroft - Gault ; sono riuscito a disattivarla e ad inserire l' accertamento CKD-Epi eGRF ove inserisco il valore, quando il laboratorio lo fornisce oppure riesco a calcolarlo sul sito www.touchcalc.com/calculators/epi ( tempo permettendo ) ; quindi le query permettono il confronto : con sorpresa ho notato varie imprecisioni nel dato fornito dai laboratori della mia zona mentre la differenza fra il valore di filtrato calcolato sul sito web e quello restituito dalle query è molto marginale ( quindi sembrano efficienti e precise , almeno in MW v13.38 )
Ti saluto , Sergio
PS : la query n. 1 estrae una riga in meno della query n. 2 , che a sua volta estrae una riga in meno della query n. 3 ( forse il mio old MillePS.db non è perfettamente integro .. ? )
Cervino- Membro Junior
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Calcolo automatico GFR_CKD-EPI
Ciao Sergio,
la numero 1 mi dà comando non valido. La 2 e la 3 mi restituiscono come errore il solito "zero elevato a potenza negativa non è definito".
la numero 1 mi dà comando non valido. La 2 e la 3 mi restituiscono come errore il solito "zero elevato a potenza negativa non è definito".
Re: Calcolo automatico GFR_CKD-EPI
ultima ( per il momento ? ) versione delle 3 query con le clausole apparentemente uniformate, salvo errori di trascrizione :drtulino ha scritto:Ciao Sergio,
la numero 1 mi dà comando non valido. La 2 e la 3 mi restituiscono come errore il solito "zero elevato a potenza negativa non è definito".
1)
WITH paz ( codice , sesso , paziente , nascita , eta , nato_a , prov_nasc , nato_a_cod , nato_a_cat ) AS ( SELECT p.codice , p.sesso , CAST( p.cognome AS Char(16)) || ' ' || p.nome , p.nascita , CAST( Days( p.nascita , Today()+1)*24/8766 AS SmallInt ) AS eta , p.comune_di_nascita , p.provincia_nascita , p.codice_comune_nasc , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN users u ON n.pa_medi = u.userid WHERE u.codice_regionale ILIKE '%' AND u.nomeuser ILIKE '%' AND p.pa_convenzione = 'S' AND Year( p.nascita) BETWEEN 1910 AND 2000 AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca BETWEEN Today()-365 AND Today() AND n.motivo_revoca = 'S' )) AND p.decesso Is Null ) ,
creatin ( codice , creat_d , creat_v ) AS ( SELECT codice , a.data_open , To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice IN ( SELECT codice FROM paz ) AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) ,
ckd_epi ( codice , ckd_d , ckd_v ) AS ( SELECT codice , a.data_open , To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice IN ( SELECT codice FROM paz ) AND ( a.ac_des ILIKE '%Ckd%Epi%' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))
SELECT paziente , sesso , nascita , eta , nato_a , prov_nasc , nato_a_cod , nato_a_cat ,
( SELECT creat_d FROM creatin a WHERE a.codice = p.codice ) AS creat_d ,
( SELECT creat_v FROM creatin a WHERE a.codice = p.codice ) AS creat_v ,
( SELECT ckd_d FROM ckd_epi a WHERE a.codice = p.codice ) AS ckd_d ,
( SELECT ckd_v FROM ckd_epi a WHERE a.codice = p.codice ) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141 * Power( CASE WHEN creat_v/0.7 BETWEEN 0.0001 AND 0.99999 THEN creat_v/0.7 ELSE 1.0 END , -0.329 ) * Power( CASE WHEN creat_v/0.7 > 1 THEN creat_v/0.7 ELSE 1.0 END , -1.209 ) * Power( 0.993 , Days( p.nascita , creat_d+1)*24/8766 ) *1.018 ELSE 141 * Power( CASE WHEN creat_v/0.9 BETWEEN 0.0001 AND 0.99999 THEN creat_v/0.9 ELSE 1.0 END , -0.411 ) * Power( CASE WHEN creat_v/0.9 > 1 THEN creat_v/0.9 ELSE 1.0 END , -1.209 ) * Power( 0.993 , Days( p.nascita , creat_d+1)*24/8766 ) END * CASE WHEN nato_a_cat = 'B' THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM paz p RIGHT JOIN creatin a USING (codice ) ORDER BY 1 LIMIT 1500 OFFSET 0
2) :
SELECT CAST( p.cognome AS Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , CAST( Days( p.nascita , a.data_open+1)*24/8766 AS SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat , a.data_open AS creat_d , To_Number( a.ac_val , '999D99' ) AS creat_v ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_d ,
( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141
* Power( CASE WHEN To_Number( a.ac_val , '999D99' )/0.7 BETWEEN 0.0001 AND 0.99999 THEN To_Number( a.ac_val , '999D99' )/0.7 ELSE 1.0 END , -0.329 )
* Power( CASE WHEN To_Number( a.ac_val , '999D99' )/0.7 > 1 THEN To_Number( a.ac_val , '999D99' )/0.7 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days( p.nascita , a.data_open+1)*24/8766 ) *1.018 ELSE 141
* Power( CASE WHEN To_Number( a.ac_val , '999D99' )/0.9 BETWEEN 0.0001 AND 0.99999 THEN To_Number( a.ac_val , '999D99' )/0.9 ELSE 1.0 END , -0.411 )
* Power( CASE WHEN To_Number( a.ac_val , '999D99' )/0.9 > 1 THEN To_Number( a.ac_val , '999D99' )/0.9 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days( p.nascita , a.data_open+1)*24/8766 ) END *
CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM (( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid ) RIGHT JOIN cart_accert a USING( codice)
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 2000
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca BETWEEN Today()-365 AND Today()
AND n.motivo_revoca = 'S' )) AND p.decesso Is Null
AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )
ORDER BY 1 LIMIT 1500 OFFSET 0
3)
SELECT CAST( p.cognome AS Char(16)) || ' ' || p.nome AS paziente , p.nascita AS nato_il , p.sesso , CAST( Days( p.nascita , (SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )))*24/8766 AS SmallInt ) AS eta , p.comune_di_nascita AS nato_a , p.provincia_nascita AS pr_nasc , p.codice_comune_nasc AS nasc_code , CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 'B' ELSE 'A' END AS cat ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_d ,
( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS creat_v ,
( SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_d ,
( SELECT To_Number( a.ac_val , '9999D9' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE '%Ckd%Epi%' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE '%Ckd%Epi%' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )) AS ckd_v ,
ROUND( CASE WHEN sesso = 'F' THEN 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 BETWEEN 0.0001 AND 0.99999
THEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -0.329 )* Power( CASE WHEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 > 1
THEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.7 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days( p.nascita , (SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )))*24/8766) *1.018
ELSE 141 * Power( CASE WHEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 BETWEEN 0.0001 AND 0.99999
THEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -0.411 )
* Power( CASE WHEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 > 1
THEN ( SELECT To_Number( a.ac_val , '999D99' ) FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL ))/0.9 ELSE 1.0 END , -1.209 )
* Power( 0.993 , Days( p.nascita , (SELECT a.data_open FROM cart_accert a WHERE a.codice = p.codice AND ( a.ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( a.ac_val ) BETWEEN 48 AND 57 ) AND NOT EXISTS ( SELECT a1.codice FROM cart_accert a1 WHERE a1.codice=a.codice AND a1.ac_des ILIKE 'Creatinina' AND (a1.data_open > a.data_open OR ( a1.data_open=a.data_open AND a1.rowid>a.rowid )) AND a1.ac_val IS NOT NULL )))*24/8766) END
* CASE WHEN p.codice_comune_nasc IN ( '999404' , '999409' , '999423' , '999435' , '999443' , '999450' , '999453' ) THEN 1.159 ELSE 1 END , 0) AS ckd_epi
FROM ( pazienti p LEFT JOIN nos_002 n USING( codice)) LEFT JOIN v_utenti u ON n.pa_medi = u.userid
WHERE u.codice_regionale ILIKE '%' AND u.nome ILIKE '%' AND p.pa_convenzione = 'S'
AND Year( p.nascita) BETWEEN 1910 AND 2000
AND ( n.pa_drevoca Is Null OR n.pa_drevoca > Today() OR ( n.pa_drevoca BETWEEN Today()-365 AND Today() AND n.motivo_revoca = 'S' )) AND p.decesso Is Null AND p.codice IN ( SELECT codice FROM cart_accert WHERE ac_des ILIKE 'Creatinina' /* AND a.data_open > Today()-1830 */AND Ascii( ac_val ) BETWEEN 48 AND 57 ) ORDER BY 1 LIMIT 1500 OFFSET 0
clausola Temporale disattivata ; per limitare la ricerca a un dato periodo rimuovere /* */ da : /* AND a.data_open > Today()-1830 */ e modificare eventualmente l' arco temporale di ricerca
Saluti Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Calcolo automatico GFR_CKD-EPI
Funzionano la 2 e la 3. Mi dici per favore che differenza c'è tra il valore della colonna CKD V e CKD epi?
Grazie Sergio.
Grazie Sergio.
Re: Calcolo automatico GFR_CKD-EPI
Prego ; in MU v13.38 funzionano tutte e 3 ; le colonne ckd_d e ckd_v servono x estrarre l' eventuale valore di CKD-Epi eGRF già presente nel MillePS.db ( ovviamente vanno adatta le relative clausole ) mentre nella colonna ckd_epi , il valore viene calcolato dal motore di ricerca .drtulino ha scritto:Funzionano la 2 e la 3. Mi dici per favore che differenza c'è tra il valore della colonna CKD V e CKD epi?
Grazie Sergio.
Ti saluto , Sergio
Cervino- Membro Junior
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: Calcolo automatico GFR_CKD-EPI
Grazie ancoraCervino ha scritto:Prego ; in MU v13.38 funzionano tutte e 3 ; le colonne ckd_d e ckd_v servono x estrarre l' eventuale valore di CKD-Epi eGRF già presente nel MillePS.db ( ovviamente vanno adatta le relative clausole ) mentre nella colonna ckd_epi , il valore viene calcolato dal motore di ricerca .drtulino ha scritto:Funzionano la 2 e la 3. Mi dici per favore che differenza c'è tra il valore della colonna CKD V e CKD epi?
Grazie Sergio.
Ti saluto , Sergio
Argomenti simili
» migliorare MilleACN
» calcolo CHADS2-VASc
» Millewin - Unofficial utilities
» errore su calcolo ldl
» CALCOLO RISCHIO CARDIOVASCOLARE
» calcolo CHADS2-VASc
» Millewin - Unofficial utilities
» errore su calcolo ldl
» CALCOLO RISCHIO CARDIOVASCOLARE
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.