FORUM PER UTENTI MILLEWIN
Attenzione !
Per intervenire sul forum è necessario essere registrati e connessi.

L'Amministratore

****************************************************
“Se tu hai una mela ed io ho una mela, e ce la scambiamo, alla fine tu ed io avremo sempre una mela ciascuno.
Ma se tu hai un’idea ed io ho un’idea, e ce la scambiamo, allora avremo entrambi due idee”.

George Bernard Shaw
****************************************************

Calcolo automatico GFR_CKD-EPI

Andare in basso

Calcolo automatico GFR_CKD-EPI

Messaggio  drtulino il Lun 4 Feb 2019 - 22:22

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.

_________________
Renato Tulino
MMG Monte Argentario (GR)
Facebook Millewin: https://www.facebook.com/groups/utentimillewin/
Twitter: @RenatoTulino
drtulino
drtulino
Moderatore
Moderatore

Messaggi : 1833
Punti : 5154
Voti per importanza dei messaggi : 91
Data d'iscrizione : 20.02.11
Età : 55
Località : Monte Argentario (GR)

Visualizza il profilo https://www.facebook.com/groups/utentimillewin/

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  Cervino il Lun 11 Feb 2019 - 1:11

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.
almeno in Teoria Si ma in pratica la Richiesta diventa  .. complessa da soddisfare :
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
Membro Junior

Messaggi : 234
Punti : 3196
Voti per importanza dei messaggi : 19
Data d'iscrizione : 03.03.11
Età : 64
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  drtulino il Lun 11 Feb 2019 - 9:00

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).

_________________
Renato Tulino
MMG Monte Argentario (GR)
Facebook Millewin: https://www.facebook.com/groups/utentimillewin/
Twitter: @RenatoTulino
drtulino
drtulino
Moderatore
Moderatore

Messaggi : 1833
Punti : 5154
Voti per importanza dei messaggi : 91
Data d'iscrizione : 20.02.11
Età : 55
Località : Monte Argentario (GR)

Visualizza il profilo https://www.facebook.com/groups/utentimillewin/

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  Cervino il Mar 12 Feb 2019 - 1:02

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).
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 .
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 :  http://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
Membro Junior

Messaggi : 234
Punti : 3196
Voti per importanza dei messaggi : 19
Data d'iscrizione : 03.03.11
Età : 64
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  drtulino il Mar 12 Feb 2019 - 8:47

Cervino ha scritto:
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).
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 .
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 :  http://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.

_________________
Renato Tulino
MMG Monte Argentario (GR)
Facebook Millewin: https://www.facebook.com/groups/utentimillewin/
Twitter: @RenatoTulino
drtulino
drtulino
Moderatore
Moderatore

Messaggi : 1833
Punti : 5154
Voti per importanza dei messaggi : 91
Data d'iscrizione : 20.02.11
Età : 55
Località : Monte Argentario (GR)

Visualizza il profilo https://www.facebook.com/groups/utentimillewin/

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  LucaLeF il Gio 14 Feb 2019 - 10:30

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

LucaLeF
Membro Esperto
Membro Esperto

Messaggi : 458
Punti : 3821
Voti per importanza dei messaggi : 11
Data d'iscrizione : 21.02.11

Visualizza il profilo

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  drtulino il Gio 14 Feb 2019 - 11:47

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.

_________________
Renato Tulino
MMG Monte Argentario (GR)
Facebook Millewin: https://www.facebook.com/groups/utentimillewin/
Twitter: @RenatoTulino
drtulino
drtulino
Moderatore
Moderatore

Messaggi : 1833
Punti : 5154
Voti per importanza dei messaggi : 91
Data d'iscrizione : 20.02.11
Età : 55
Località : Monte Argentario (GR)

Visualizza il profilo https://www.facebook.com/groups/utentimillewin/

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  Cervino il Sab 23 Feb 2019 - 23:45

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

Cervino
Membro Junior
Membro Junior

Messaggi : 234
Punti : 3196
Voti per importanza dei messaggi : 19
Data d'iscrizione : 03.03.11
Età : 64
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  drtulino il Lun 25 Feb 2019 - 8:38

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
Ciao Sergio, mi restituisce come errore: "zero elevato a potenza negativa non è definito". Comunque mi sembra un lavoro ciclopico. Grazie.

_________________
Renato Tulino
MMG Monte Argentario (GR)
Facebook Millewin: https://www.facebook.com/groups/utentimillewin/
Twitter: @RenatoTulino
drtulino
drtulino
Moderatore
Moderatore

Messaggi : 1833
Punti : 5154
Voti per importanza dei messaggi : 91
Data d'iscrizione : 20.02.11
Età : 55
Località : Monte Argentario (GR)

Visualizza il profilo https://www.facebook.com/groups/utentimillewin/

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  Cervino il Mar 26 Feb 2019 - 0:45

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 

Cervino
Membro Junior
Membro Junior

Messaggi : 234
Punti : 3196
Voti per importanza dei messaggi : 19
Data d'iscrizione : 03.03.11
Età : 64
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  drtulino il Mar 26 Feb 2019 - 18:46

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

_________________
Renato Tulino
MMG Monte Argentario (GR)
Facebook Millewin: https://www.facebook.com/groups/utentimillewin/
Twitter: @RenatoTulino
drtulino
drtulino
Moderatore
Moderatore

Messaggi : 1833
Punti : 5154
Voti per importanza dei messaggi : 91
Data d'iscrizione : 20.02.11
Età : 55
Località : Monte Argentario (GR)

Visualizza il profilo https://www.facebook.com/groups/utentimillewin/

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  Cervino il Mer 27 Feb 2019 - 0:14

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
Ciao Renato ,
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
Membro Junior

Messaggi : 234
Punti : 3196
Voti per importanza dei messaggi : 19
Data d'iscrizione : 03.03.11
Età : 64
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  drtulino il Mer 27 Feb 2019 - 10:03

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, 
   la sostituzione di questa subquery nella prima parte della query principale mi dà errore di sintassi. Forse sbaglio nel fare copia incolla?

_________________
Renato Tulino
MMG Monte Argentario (GR)
Facebook Millewin: https://www.facebook.com/groups/utentimillewin/
Twitter: @RenatoTulino
drtulino
drtulino
Moderatore
Moderatore

Messaggi : 1833
Punti : 5154
Voti per importanza dei messaggi : 91
Data d'iscrizione : 20.02.11
Età : 55
Località : Monte Argentario (GR)

Visualizza il profilo https://www.facebook.com/groups/utentimillewin/

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  Cervino il Gio 28 Feb 2019 - 22:15

drtulino ha scritto:
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, 
   la sostituzione di questa subquery nella prima parte della query principale mi dà errore di sintassi. Forse sbaglio nel fare copia incolla?
Prova 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 , '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
Membro Junior

Messaggi : 234
Punti : 3196
Voti per importanza dei messaggi : 19
Data d'iscrizione : 03.03.11
Età : 64
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  drtulino il Gio 28 Feb 2019 - 22:23

Ciao Sergio, mi restituisce sempre, come errore: "zero elevato a potenza negativa non è definito".

_________________
Renato Tulino
MMG Monte Argentario (GR)
Facebook Millewin: https://www.facebook.com/groups/utentimillewin/
Twitter: @RenatoTulino
drtulino
drtulino
Moderatore
Moderatore

Messaggi : 1833
Punti : 5154
Voti per importanza dei messaggi : 91
Data d'iscrizione : 20.02.11
Età : 55
Località : Monte Argentario (GR)

Visualizza il profilo https://www.facebook.com/groups/utentimillewin/

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  Cervino il Sab 2 Mar 2019 - 0:56

drtulino ha scritto:Ciao Sergio, mi restituisce sempre, come errore: "zero elevato a potenza negativa non è definito".
Ciao  Renato , sembra un Mistero ... insoluble ;  proverei con :


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
Membro Junior

Messaggi : 234
Punti : 3196
Voti per importanza dei messaggi : 19
Data d'iscrizione : 03.03.11
Età : 64
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  drtulino il Sab 2 Mar 2019 - 9:16

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.

_________________
Renato Tulino
MMG Monte Argentario (GR)
Facebook Millewin: https://www.facebook.com/groups/utentimillewin/
Twitter: @RenatoTulino
drtulino
drtulino
Moderatore
Moderatore

Messaggi : 1833
Punti : 5154
Voti per importanza dei messaggi : 91
Data d'iscrizione : 20.02.11
Età : 55
Località : Monte Argentario (GR)

Visualizza il profilo https://www.facebook.com/groups/utentimillewin/

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  Cervino il Sab 2 Mar 2019 - 23:45

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.
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)

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
Membro Junior

Messaggi : 234
Punti : 3196
Voti per importanza dei messaggi : 19
Data d'iscrizione : 03.03.11
Età : 64
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  drtulino il Mar 5 Mar 2019 - 13:46

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".

_________________
Renato Tulino
MMG Monte Argentario (GR)
Facebook Millewin: https://www.facebook.com/groups/utentimillewin/
Twitter: @RenatoTulino
drtulino
drtulino
Moderatore
Moderatore

Messaggi : 1833
Punti : 5154
Voti per importanza dei messaggi : 91
Data d'iscrizione : 20.02.11
Età : 55
Località : Monte Argentario (GR)

Visualizza il profilo https://www.facebook.com/groups/utentimillewin/

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  Cervino il Gio 7 Mar 2019 - 23:24

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".
ultima ( per il momento ? ) versione delle 3 query con le clausole apparentemente uniformate, salvo errori di trascrizione :
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
Membro Junior

Messaggi : 234
Punti : 3196
Voti per importanza dei messaggi : 19
Data d'iscrizione : 03.03.11
Età : 64
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  drtulino il Ven 8 Mar 2019 - 8:40

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.

_________________
Renato Tulino
MMG Monte Argentario (GR)
Facebook Millewin: https://www.facebook.com/groups/utentimillewin/
Twitter: @RenatoTulino
drtulino
drtulino
Moderatore
Moderatore

Messaggi : 1833
Punti : 5154
Voti per importanza dei messaggi : 91
Data d'iscrizione : 20.02.11
Età : 55
Località : Monte Argentario (GR)

Visualizza il profilo https://www.facebook.com/groups/utentimillewin/

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  Cervino il Sab 16 Mar 2019 - 22:42

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.
Prego ;  in MU v13.38 funzionano tutte e 3 ;  le colonne  ckd_d   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 .

Ti saluto ,  Sergio

Cervino
Membro Junior
Membro Junior

Messaggi : 234
Punti : 3196
Voti per importanza dei messaggi : 19
Data d'iscrizione : 03.03.11
Età : 64
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  drtulino il Dom 17 Mar 2019 - 8:53

Cervino ha scritto:
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.
Prego ;  in MU v13.38 funzionano tutte e 3 ;  le colonne  ckd_d   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 .

Ti saluto ,  Sergio
Grazie ancora

_________________
Renato Tulino
MMG Monte Argentario (GR)
Facebook Millewin: https://www.facebook.com/groups/utentimillewin/
Twitter: @RenatoTulino
drtulino
drtulino
Moderatore
Moderatore

Messaggi : 1833
Punti : 5154
Voti per importanza dei messaggi : 91
Data d'iscrizione : 20.02.11
Età : 55
Località : Monte Argentario (GR)

Visualizza il profilo https://www.facebook.com/groups/utentimillewin/

Torna in alto Andare in basso

Re: Calcolo automatico GFR_CKD-EPI

Messaggio  Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto


 
Permessi di questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum