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
****************************************************

pz diabetici e altro

Andare in basso

pz diabetici e altro

Messaggio  nanci giacinto il Gio 27 Set 2012 - 23:34

Salve, non riesco a mettere insieme questi dati: pz diabetici tra i 40 e 70 anni, con creatinina inferiore a 1,4, cockroft superiore a 60, bmi superiore a 28, hba1c inferiore a 8,5 e in terapia con antidiabetici orali. Criterio di esclusione della query: pz con patolgie della colecisti. Grazie saluti dott. Nanci Giacinto associazione MEDIASS otto medici in rete geografica a catanzaro
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2916
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  Cervino il Sab 29 Set 2012 - 1:01

Prova eventualmente con :

Select Distinct Cast( p.cognome As Char(15)), p.nome,
Cast( p.nascita As Char(15)) As nascita, p.sesso,

(Select Cast( Max( b.data_open) As Char(15)) From cart_pazpbl b Where b.codice = p.codice
And b.cp_code Like '250%' And Not (b.pb_status = 'I' And b.modalita ='A'))
_DM_onset_,

(Select Distinct 1 From cart_terap t Where t.codice = p.codice
And ( t.co_atc Like 'A10BA02' Or t.co_atc Like 'A10BD02%' Or t.co_atc Like 'A10BD03%'
Or t.co_atc Like 'A0BD05' Or t.co_atc Like 'A10BD07%' Or t.co_atc Like 'A10BD08%')
And t.data_open Between query_d-180 And query_d )
_metformina_e_ass_,

(Select Distinct 1 From cart_terap t Where t.codice = p.codice And ( t.co_atc Like 'A10BB%' Or t.co_atc Like 'A10BF%' Or t.co_atc Like 'A10BG%' Or t.co_atc Like 'A10BH%' Or t.co_atc Like 'A10BX04' Or t.co_atc Like 'A10BX%' Or t.co_atc Like 'A10BD04' Or t.co_atc Like 'A10BD06' )
And t.data_open Between query_d-180 And query_d )
_antidiabetici_altri_,

(Select Distinct 1 From cart_terap t Where t.codice=p.codice And t.co_atc Like 'A10A%'
And t.data_open Between query_d-180 And query_d )
_insulina_,

(Select a.ac_val From cart_accert a Where a.codice = p.codice And ac_des Like '%BMI%'
And a.ac_val Is Not Null And Not Exists (Select a1.codice From cart_accert a1
Where a.codice = a1.codice And a1.ac_des Like '%BMI%' 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)
And a.data_open Between query_d-8000 And query_d )
_Bmi_,

(Select If Locate( a.ac_val,',') > 0 Then Cast( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')) As Dec(4,1)) Else
Cast( a.ac_val As Dec(4,1)) Endif From cart_accert a Where a.codice=p.codice And
(a.ac_des Like 'Emoglobina%Glicata') And a.ac_val Is Not Null And Not Exists (Select a1.codice
From cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like 'Emoglobina%Glicata'
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 ) And a.data_open Between query_d-8000 And query_d )
_HbA1c_,

(Select If Locate( a.ac_val,',') > 0 Then Cast( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')) As Dec(3,2)) Else
Cast( a.ac_val As Dec(3,2)) Endif From cart_accert a Where a.codice=p.codice And a.ac_des Like 'Creatinina' And a.ac_val Is Not Null And Not Exists (Select a1.codice From
cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like '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 )
And a.data_open Between query_d-8000 And query_d )
_creatinina_,

(Select If Locate( a.ac_val,',') > 0 Then Cast( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')) As Int) Else
Cast( a.ac_val As Int) Endif From cart_accert a Where a.codice=p.codice And a.ac_des Like '%Cockcroft%' And a.ac_val Is Not Null And Not Exists (Select a1.codice From
cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like '%Cockcroft%' 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 )
And a.data_open Between query_d-8000 And query_d )
_eGRF_,

Today() As query_d

FROM ( pazienti p Left Outer Join nos_002 n On p.codice = n.codice )
Left Outer Join v_utenti u On u.userid = n.pa_medi
Where u.codice_regionale Like '%' And p.pa_convenzione Like 'S'
And ( pa_drevoca Is Null Or pa_drevoca > query_d Or ( pa_drevoca Between query_d-365 And query_d And motivo_revoca = 'S')) And ( pa_dscelta Is Null Or pa_dscelta < query_d )
And p.nascita < query_d And ( p.decesso Is Null Or p.decesso < query_d )
And DateDiff ( hh, p.nascita, Today())/8766 Between 40 And 70
And _DM_onset_ Is Not Null And _BMI_ > 28 And _HbA1c_ <69
And _creatinina_ < 1.4 And _eGRF_ > 60
And _metformina_e_ass_ Is Not Null And _antidiabetici_altri_ Is Not Null
And p.codice Not In ( Select l.codice From cart_problemi l , cart_pazpbl b Where l.codice=p.codice And ( l.cp_code Like '574%' Or l.cp_code Like '575%' Or l.cp_code Like '576%' )
And l.pb_code = b.pb_code And Not ( b.pb_status = 'I' And modalita = 'A' ) And b.certezza <> 'S' )

Order By nascita desc, p.cognome, p.nome


Adattare le condizioni di ricerca ( e/o clausole ) alle proprie esigenze ( catologo regionale, periodo, ICD9, ... )

Non posso verificare le Subquery : _HbA1c_ ( in quanto uso valori interi in mmol/mol )
e _eGRF_ in quanto utilizzo una formula diversa per stimare il parametro ( CKD EPI GRF Calculator )

Saluti , Sergio , Orzivecchi (BS)


nanci giacinto ha scritto:Salve, non riesco a mettere insieme questi dati: pz diabetici tra i 40 e 70 anni, con creatinina inferiore a 1,4, cockroft superiore a 60, bmi superiore a 28, hba1c inferiore a 8,5 e in terapia con antidiabetici orali. Criterio di esclusione della query: pz con patolgie della colecisti. Grazie saluti dott. Nanci Giacinto associazione MEDIASS otto medici in rete geografica a catanzaro

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2960
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  nanci giacinto il Sab 29 Set 2012 - 23:18

un grazie di cuore per l'aiuto. purtroppo mi da risultato zero. ciao nanci
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2916
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  Cervino il Dom 30 Set 2012 - 8:09

Ma era abbastanza prevedibile visto le numerose clausole restrittive da Te richieste ed un mio errore ( un And al posto di Or ) ; innnanzi tutto esegui la quey base , per vedere se estrae tutti i Diabetici ( con o eventualmente senza le clausole di esclusione dell' età : [color]
And DateDiff ( hh, p.nascita, Today())/8766 Between 40 And 70
e delle Patologie della Colecisti :
And p.codice Not In ( Select l.codice From cart_problemi l , cart_pazpbl b Where l.codice=p.codice And ( l.cp_code Like '574%' Or l.cp_code Like '575%' Or l.cp_code Like '576%' )
And l.pb_code = b.pb_code And Not ( b.pb_status = 'I' And modalita = 'A' ) And b.certezza <> 'S' ))
:

Select Distinct Cast( p.cognome As Char(15)), p.nome,
Cast( p.nascita As Char(15)) As nascita, p.sesso,

(Select Cast( Max( b.data_open) As Char(15)) From cart_pazpbl b Where b.codice = p.codice
And b.cp_code Like '250%' And Not (b.pb_status = 'I' And b.modalita ='A'))
_DM_onset_,

(Select Distinct 1 From cart_terap t Where t.codice = p.codice
And ( t.co_atc Like 'A10BA02' Or t.co_atc Like 'A10BD02%' Or t.co_atc Like 'A10BD03%'
Or t.co_atc Like 'A0BD05' Or t.co_atc Like 'A10BD07%' Or t.co_atc Like 'A10BD08%')
And t.data_open Between query_d-180 And query_d )
_metformina_e_ass_,

(Select Distinct 1 From cart_terap t Where t.codice = p.codice And ( t.co_atc Like 'A10BB%' Or t.co_atc Like 'A10BF%' Or t.co_atc Like 'A10BG%' Or t.co_atc Like 'A10BH%' Or t.co_atc Like 'A10BX04' Or t.co_atc Like 'A10BX%' Or t.co_atc Like 'A10BD04' Or t.co_atc Like 'A10BD06' )
And t.data_open Between query_d-180 And query_d )
_antidiabetici_altri_,

(Select Distinct 1 From cart_terap t Where t.codice=p.codice And t.co_atc Like 'A10A%'
And t.data_open Between query_d-180 And query_d )
_insulina_,

(Select Cast( a.ac_val As Dec(4,1)) From cart_accert a Where a.codice = p.codice And ac_des Like '%BMI%'
And a.ac_val Is Not Null And Not Exists (Select a1.codice From cart_accert a1
Where a.codice = a1.codice And a1.ac_des Like '%BMI%' 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)
And a.data_open Between query_d-8000 And query_d )
_Bmi_,

(Select If Locate( a.ac_val,',') > 0 Then Cast( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')) As Dec(4,1)) Else
Cast( a.ac_val As Dec(4,1)) Endif From cart_accert a Where a.codice=p.codice And
(a.ac_des Like 'Emoglobina%Glicata') And a.ac_val Is Not Null And Not Exists (Select a1.codice
From cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like 'Emoglobina%Glicata'
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 ) And a.data_open Between query_d-8000 And query_d )
_HbA1c_,

(Select If Locate( a.ac_val,',') > 0 Then Cast( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')) As Dec(3,2)) Else
Cast( a.ac_val As Dec(3,2)) Endif From cart_accert a Where a.codice=p.codice And a.ac_des Like 'Creatinina' And a.ac_val Is Not Null And Not Exists (Select a1.codice From
cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like '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 )
And a.data_open Between query_d-8000 And query_d )
_creatinina_,

(Select If Locate( a.ac_val,',') > 0 Then Cast( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')) As Int) Else
Cast( a.ac_val As Int) Endif From cart_accert a Where a.codice=p.codice And a.ac_des Like '%Cockcroft%' And a.ac_val Is Not Null And Not Exists (Select a1.codice From
cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like '%Cockcroft%' 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 )
And a.data_open Between query_d-8000 And query_d )
_eGRF_,

Today() As query_d

FROM ( pazienti p Left Outer Join nos_002 n On p.codice = n.codice )
Left Outer Join v_utenti u On u.userid = n.pa_medi
Where u.codice_regionale Like '%' And p.pa_convenzione Like 'S'
And ( pa_drevoca Is Null Or pa_drevoca > query_d Or ( pa_drevoca Between query_d-365 And query_d And motivo_revoca = 'S')) And ( pa_dscelta Is Null Or pa_dscelta < query_d )
And p.nascita < query_d And ( p.decesso Is Null Or p.decesso < query_d )
And DateDiff ( hh, p.nascita, Today())/8766 Between 40 And 70
And _DM_onset_ Is Not Null
And p.codice Not In ( Select l.codice From cart_problemi l , cart_pazpbl b Where l.codice=p.codice And ( l.cp_code Like '574%' Or l.cp_code Like '575%' Or l.cp_code Like '576%' )
And l.pb_code = b.pb_code And Not ( b.pb_status = 'I' And modalita = 'A' ) And b.certezza <> 'S' )

Order By nascita desc, p.cognome, p.nome


poi se il risultato è soddisfacente , riesegui l' estrazione aggiungendo ogni volta una clausola di esclusione :
BMI : And _BMI_ > 28
Emoglobina glicata: And _HbA1c_ <8.5
Creatinina : And _creatinina_ < 1.4
Grf calcolato con formula a scelta indicata nella subquery ( nell' esempio : Cockcroft ) : And _eGRF_ > 60
DM in Terapia con Antidiabetici x Os ( modificare eventualmente i codici ATC ) :
And ( _metformina_e_ass_ Is Not Null Or _antidiabetici_altri_ Is Not Null )
DM in Terapia con Antidiabetici x Os e/o Insulina ( come esempio, anche se non richiesta , forse ? )
And ( _metformina_e_ass_ Is Not Null Or _antidiabetici_altri_ Is Not Null Or _insulina_ Is Not Null )

Cosi operando ad ogni riesecuzione della query, se il risultato non è soddisfacente , devi verificare e/o modificare una piu' clausole e/o condizioni di ricerca.

Ti saluto , Sergio , Orzivecchi ( BS )

nanci giacinto ha scritto:un grazie di cuore per l'aiuto. purtroppo mi da risultato zero. ciao nanci

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2960
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  nanci giacinto il Mer 10 Ott 2012 - 6:28

Caro Cervino grazie per la query. Quella base funziona benissimo, ma quando sostituisco a: _bmi_, la clausola limitativa:And_BMI_ > 28 la query mi da errore proprio in quel punto e così per le altre clausole limitative. Prima di chiederti nuovamente aiuto ho provato in tutte le maniere ma niente. Dove sbaglio? grazie saluti dott. nanci Giacinto associaizone MEDIASS otto medici in rete a Catanzaro.
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2916
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  Cervino il Lun 15 Ott 2012 - 0:39

Le clausole di esclusione ( in rosso ) vanno aggiunte nella query principale , una ad una, nelle condizioni di ricerca finali; rieseguendo l' estrazione il numero di righe estratte si ridurrà progressivamente :

Select ...
FROM ( pazienti p Left Outer Join nos_002 n On p.codice = n.codice )
Left Outer Join v_utenti u On u.userid = n.pa_medi
Where u.codice_regionale Like '%' And p.pa_convenzione Like 'S'
And ( pa_drevoca Is Null Or pa_drevoca > query_d Or ( pa_drevoca Between query_d-365 And query_d And motivo_revoca = 'S')) And ( pa_dscelta Is Null Or pa_dscelta < query_d )
And p.nascita < query_d And ( p.decesso Is Null Or p.decesso < query_d )
And DateDiff ( hh, p.nascita, Today())/8766 Between 40 And 70
And _DM_onset_ Is Not Null
And _BMI_ > 28 And _HbA1c_ <8.5 And _creatinina_ < 1.4 And _eGRF_ > 60 And ( _metformina_e_ass_ Is Not Null Or _antidiabetici_altri_ Is Not Null Or _insulina_ Is Not Null )
And p.codice Not In ( Select l.codice From cart_problemi l , cart_pazpbl b Where l.codice=p.codice And ( l.cp_code Like '574%' Or l.cp_code Like '575%' Or l.cp_code Like '576%' )
And l.pb_code = b.pb_code And Not ( b.pb_status = 'I' And modalita = 'A' ) And b.certezza <> 'S' )

Order By nascita desc, p.cognome, p.nome


Se il Problema dovesse persistere , riporta esattamente l' errore segnalato .
Ti saluto , Sergio Orzivecchi ( BS )

nanci giacinto ha scritto:Caro Cervino grazie per la query. Quella base funziona benissimo, ma quando sostituisco a: _bmi_, la clausola limitativa:And_BMI_ > 28 la query mi da errore proprio in quel punto e così per le altre clausole limitative. Prima di chiederti nuovamente aiuto ho provato in tutte le maniere ma niente. Dove sbaglio? grazie saluti dott. nanci Giacinto associaizone MEDIASS otto medici in rete a Catanzaro.

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2960
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  nanci giacinto il Dom 21 Ott 2012 - 6:34

Caro Cervino la interrogazione (query) funziona benissimo. Soltanto l'aggiunta della limitazione sulla filtrazione glomerulare da risultato zero, ma gli estratti sono così pochi che la limitazione si può verificare conoscendo i pz. Domanda ma è possibile che non esiste un manuale con i rudimenti minimi per le query con le tabelle? grazie ancora ciao Nanci associazione MEDIASS otto medici in rete a Catanzaro.
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2916
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  Admin il Lun 22 Ott 2012 - 0:38

Questa dovrebbe funzionare bene:

Select Distinct p.cognome+' '+p.nome Nome, p.nascita, CAST(YEARS(p.nascita, Today()) as CHAR (4))eta, p.sesso,

(Select Max( b.data_open) From cart_pazpbl b Where b.codice = p.codice And b.cp_code Like '250%' And Not (b.pb_status = 'I' And b.modalita ='A')) _DM_onset_,

(Select Distinct 'Metformina' From cart_terap t Where t.codice = p.codice And ( t.co_atc Like 'A10BA02' Or t.co_atc Like 'A10BD02%' Or t.co_atc Like 'A10BD03%' Or t.co_atc Like 'A0BD05' Or t.co_atc Like 'A10BD07%' Or t.co_atc Like 'A10BD08%') And t.data_open > (query_d-90)) _metformina_e_ass_,

(Select Distinct 'Altri_Antidiabetici' From cart_terap t Where t.codice = p.codice And ( t.co_atc Like 'A10BB%' Or t.co_atc Like 'A10BF%' Or t.co_atc Like 'A10BG%' Or t.co_atc Like 'A10BH%' Or t.co_atc Like 'A10BX04' Or t.co_atc Like 'A10BX%' Or t.co_atc Like 'A10BD04' Or t.co_atc Like 'A10BD06' ) And t.data_open Between query_d-90 And query_d ) _antidiabetici_altri_,

(Select Distinct 'Insulina' From cart_terap t Where t.codice=p.codice And t.co_atc Like 'A10A%' And t.data_open > (query_d-90)) _Insulina_,

(SELECT a.ac_val FROM cart_accert a WHERE a.codice = p.codice AND a.ac_code = '2609' And a.ac_val > '' AND not exists (SELECT x.codice from cart_accert x WHERE x.codice = p.codice AND x.ac_code = a.ac_code and x.ac_val > '' AND STRING (DATEFORMAT(x.data_open, 'YYYYMMDD'), x.ora) >STRING (DATEFORMAT(a.data_open, 'YYYYMMDD'), a.ora)) AND (a.data_open >(query_d-3650))) _BMI_,

(Select (If charindex(',',ac_val)>0 then cast(substring( ac_val,1,(charindex(',',ac_val) - 1 )) + '.' +
substring(ac_val, (charindex(',',ac_val) +1 )) AS dec (7,2)) else cast(ac_val AS dec (7,2)) endif) From cart_accert a Where a.codice=p.codice And a.ac_des Like '%Glicata%' And a.ac_val Is Not Null And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like '%Glicata%' AND STRING (DATEFORMAT(a1.data_open, 'YYYYMMDD'), a1.ora) >STRING (DATEFORMAT(a.data_open, 'YYYYMMDD'), a.ora) And a1.ac_val Is Not Null)) _Glicata_,

(Select (If charindex(',',ac_val)>0 then cast(substring( ac_val,1,(charindex(',',ac_val) - 1 )) + '.' +
substring(ac_val, (charindex(',',ac_val) +1 )) AS dec (7,2)) else cast(ac_val AS dec (7,2)) endif) From cart_accert a Where a.codice=p.codice And a.ac_des Like 'Creatinina' And a.ac_val Is Not Null And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like 'Creatinina' AND STRING (DATEFORMAT(a1.data_open, 'YYYYMMDD'), a1.ora) >STRING (DATEFORMAT(a.data_open, 'YYYYMMDD'), a.ora) And a1.ac_val Is Not Null)) _Creatinina_,

(Select (If charindex(',',ac_val)>0 then cast(substring( ac_val,1,(charindex(',',ac_val) - 1 )) + '.' +
substring(ac_val, (charindex(',',ac_val) +1 )) AS dec (7,2)) else cast(ac_val AS dec (7,2)) endif) From cart_accert a Where a.codice=p.codice And a.Ac_Nt_Code = 'MW_3952' And a.ac_val Is Not Null And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.Ac_Nt_Code = 'MW_3952' AND STRING (DATEFORMAT(a1.data_open, 'YYYYMMDD'), a1.ora) >STRING (DATEFORMAT(a.data_open, 'YYYYMMDD'), a.ora) And a1.ac_val Is Not Null)) _Cockroft_,

' '_, Today() As query_d

FROM pazienti p Left Outer Join nos_002 n On p.codice = n.codice
Where n.Pa_medi Like '%'
And p.pa_convenzione Like 'S'
And ( pa_drevoca Is Null Or pa_drevoca > Today()-365)
And p.decesso Is Null
And eta Between 40 And 70
AND _DM_onset_ is not null
And _BMI_ > 28
And _Glicata_ < 8.5
And _creatinina_ < 1.4
And _Cockroft_ > 60
And (_metformina_e_ass_ Is Not Null Or _antidiabetici_altri_ Is Not Null)

And p.codice Not In ( Select l.codice From cart_problemi l , cart_pazpbl b Where l.codice=p.codice And ( l.cp_code Like '574%' Or l.cp_code Like '575%' Or l.cp_code Like '576%' )
And l.pb_code = b.pb_code And Not ( b.pb_status = 'I' And modalita = 'A' ) And b.certezza <> 'S' )

ORDER BY 1,3

_________________
L'Amministratore
Giuseppe Blasio
avatar
Admin
Admin
Admin

Messaggi : 521
Punti : 3383
Voti per importanza dei messaggi : 85
Data d'iscrizione : 20.02.11
Località : CASERTA

Visualizza il profilo http://utentimillewin.forumattivo.it

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  nanci giacinto il Lun 22 Ott 2012 - 23:00

Salve. La tua query funziona benissimo, il problema è che la registrazione automatica della cockroft in millewin è recente per cui su 1500 assistito solo 368 hanno la sua registrazione in cartella credo quindi che la tua query esclude tutti gli altri assistiti senza la sua registrazione, infatti con la query del dott. Cervino estraggo trenta pazienti con la tua solo otto. Grazie saluti dot. nanci giacinto associazione MEDIASS otto medici in rete geografica a Catanzaro.
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2916
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  Cervino il Mar 23 Ott 2012 - 0:56

Per cercare di risolvere il problema ( ma posso fare solo ipotesi, non avendo la stima automatica del GRF in MW ), concentrerei la mia attenzione sulle due subquery : Creatinina e GRF , analizzando il risultato della seguente estrazione :

Select Distinct Cast( p.cognome As Char(15)), p.nome,
Cast( p.nascita As Char(15)) As nascita, p.sesso,

(Select Cast( Max( b.data_open) As Char(15)) From cart_pazpbl b Where b.codice = p.codice
And b.cp_code Like '250%' And Not (b.pb_status = 'I' And b.modalita ='A'))
_DM_onset_,

(Select If Locate( a.ac_val,',') > 0 Then Cast( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')) As Dec(3,2)) Else
Cast( a.ac_val As Dec(3,2)) Endif From cart_accert a Where a.codice=p.codice And a.ac_des Like 'Creatinina' And a.ac_val Is Not Null And Not Exists (Select a1.codice From
cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like '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 )
And a.data_open Between query_d-365 And query_d )
_creatinina_,

(Select If Locate( a.ac_val,',') > 0 Then Cast( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')) As Int) Else
Cast( a.ac_val As Int) Endif From cart_accert a Where a.codice=p.codice And a.ac_des Like '%Cockcroft%' And a.ac_val Is Not Null And Not Exists (Select a1.codice From
cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like '%Cockcroft%' 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 )
And a.data_open Between query_d-365 And query_d )
_eGRF_,

Today() As query_d

FROM ( pazienti p Left Outer Join nos_002 n On p.codice = n.codice )
Left Outer Join v_utenti u On u.userid = n.pa_medi
Where u.codice_regionale Like '%' And p.pa_convenzione Like 'S'
And ( pa_drevoca Is Null Or pa_drevoca > query_d Or ( pa_drevoca Between query_d-365 And query_d And motivo_revoca = 'S')) And ( pa_dscelta Is Null Or pa_dscelta < query_d )
And p.nascita < query_d And ( p.decesso Is Null Or p.decesso < query_d )
And DateDiff ( hh, p.nascita, Today())/8766 Between 40 And 70
And _DM_onset_ Is Not Null
And _creatinina_ < 1.4

Order By nascita desc, p.cognome, p.nome


se il campo _eGRF_ è nullo solo in poche righe estratte, significa che il calcolo automatico del GRF attivo nella Tua versione di MW ( nell' esempio da circa un anno ) viene rilevato e le condizioni di ricerca sono valide , per cui è abbastanza prevedibile che all' aggiunta di condizioni di esclusione il numero delle righe estratte si assottigli quasi a 0 ; se invece i valori nulli dell' _eGRF_ sono numerosi ( nonostante il calcolo automatico della Clearance recentemente attivato ) , bisogna modificare una condizioni di ricerca, almeno , nella relativa subquery .

Come già piu' volte dibattuto in numerosi post sul Forum ( vecchio e nuovo ), non occorre essere Esperti di SQL per eseguire le Estrazioni in MW ( siamo Medici non Informatici ) : basta conoscere :
1) l' ABC del Linquaggio di Interrogazione, facilmente reperibile in Rete
2) la struttura del Mille.db facilmente ottenibile con le seguenty query :

Select * From tables

(nel mio caso 123 Tabelle ) e poi analizzare le singole tabelle con una query del tipo :

Select * From pazienti p
Where cognome Like '%' And nome Like '%'


introducendo delle clausole limitative per ridurre il numero di righe estratte :

Select * From cart_accert a
Where a.data_open > Today()-1


prendere nota dei campi presenti nelle varie tabelle e poi costruire mattone per mattone le interrogazioni, combinando tabelle e campi secondo necessità e con infinita pazienza; sarebbe opportuno seguire delle semplice regole ( x quanto soggettive ) nella impostazione della query ( utilizzo oculato delle lettere : tabelle e campi in minuscole mentre i comandi SQL in maiuscole ( almeno la prima lettera ), nomi delle tabelle ( alias ) diversi ( ad esempio : cart_accert a , cart_pazpbl b , cart_press e ... ma non è facile avendo a disposizione
26 lettere x oltre 100 tabelle )

Ti saluto , Sergio Tomasini , Orzivecchi ( BS )


nanci giacinto ha scritto:Salve. La tua query funziona benissimo, il problema è che la registrazione automatica della cockroft in millewin è recente per cui su 1500 assistito solo 368 hanno la sua registrazione in cartella credo quindi che la tua query esclude tutti gli altri assistiti senza la sua registrazione, infatti con la query del dott. Cervino estraggo trenta pazienti con la tua solo otto. Grazie saluti dot. nanci giacinto associazione MEDIASS otto medici in rete geografica a Catanzaro.

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2960
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  Admin il Mar 23 Ott 2012 - 11:00

nanci giacinto ha scritto:Salve. La tua query funziona benissimo, il problema è che la registrazione automatica della cockroft in millewin è recente per cui su 1500 assistito solo 368 hanno la sua registrazione in cartella credo quindi che la tua query esclude tutti gli altri assistiti senza la sua registrazione, infatti con la query del dott. Cervino estraggo trenta pazienti con la tua solo otto. Grazie saluti dot. nanci giacinto associazione MEDIASS otto medici in rete geografica a Catanzaro.

Probabilmente c'è qualche equivoco, anche la query di Cervino dovrebbe estrarre solo i pazienti con valore di "Cockroft" registrato, ma questi 30 pazienti soddisfano nel contempo anche le altre clausole di esclusione ?

And ( pa_drevoca Is Null Or pa_drevoca > Today()-365)
And p.decesso Is Null
And eta Between 40 And 70
AND _DM_onset_ is not null
And _BMI_ > 28
And _Glicata_ < 8.5
And _creatinina_ < 1.4
And _Cockroft_ > 60
And (_metformina_e_ass_ Is Not Null Or _antidiabetici_altri_ Is Not Null)
And p.codice Not In ( Select l.codice From cart_problemi l , cart_pazpbl b Where l.codice=p.codice And ( l.cp_code Like '574%' Or l.cp_code Like '575%' Or l.cp_code Like '576%' )
And l.pb_code = b.pb_code And Not ( b.pb_status = 'I' And modalita = 'A' ) And b.certezza <> 'S' )



Cioè sono tutti contemporaneamente pazienti attivi, con problema diabete registrato, età tra 40 e 70 anni, BMI>28, Glicata<8.5, creatinina<1.4, Cockroft>60, in terapia con antidiabetici orali e senza patologie della colecisti ?

_________________
L'Amministratore
Giuseppe Blasio
avatar
Admin
Admin
Admin

Messaggi : 521
Punti : 3383
Voti per importanza dei messaggi : 85
Data d'iscrizione : 20.02.11
Località : CASERTA

Visualizza il profilo http://utentimillewin.forumattivo.it

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  Admin il Gio 25 Ott 2012 - 11:51

Sul mio database ho effettuato la seguente estrazione:

Select Distinct p.cognome, p.nome, p.nascita, p.sesso,

(Select If Locate( a.ac_val,',') > 0 Then Cast( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')) As Int) Else
Cast( a.ac_val As Int) Endif From cart_accert a Where a.codice=p.codice And a.ac_des Like '%Cockcroft%' And a.ac_val Is Not Null And Not Exists (Select a1.codice From
cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like '%Cockcroft%' 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 )
And a.data_open Between query_d-365 And query_d ) _eGRF_Cervino_,


(Select (If charindex(',',ac_val)>0 then cast(substring( ac_val,1,(charindex(',',ac_val) - 1 )) + '.' +
substring(ac_val, (charindex(',',ac_val) +1 )) AS dec (7,2)) else CAST(a.ac_val As DEC (7,2)) endif) From cart_accert a Where a.codice=p.codice And a.Ac_Nt_Code = 'MW_3952' And a.ac_val Is Not Null And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.Ac_Nt_Code = 'MW_3952' AND STRING (DATEFORMAT(a1.data_open, 'YYYYMMDD'), a1.ora) >STRING (DATEFORMAT(a.data_open, 'YYYYMMDD'), a.ora) And a1.ac_val Is Not Null)) COCKROFT_Blasio, ' '_,


(Select a.ac_val
From cart_accert a Where a.codice=p.codice And a.Ac_Nt_Code = 'MW_3952' And a.ac_val Is Not Null And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.Ac_Nt_Code = 'MW_3952' AND STRING (DATEFORMAT(a1.data_open, 'YYYYMMDD'), a1.ora) >STRING (DATEFORMAT(a.data_open, 'YYYYMMDD'), a.ora) And a1.ac_val Is Not Null)) COCKROFT_MW,


Today() As query_d

FROM pazienti p
Where (COCKROFT_Blasio IS NOT NULL OR COCKROFT_MW IS NOT NULL OR _eGRF_Cervino_ is not null)


Ottenendo il seguente risultato:

nascita
sesso
_egrf_cervino_
cockroft_blasio
cockroft_mw


query_d
04/11/48
M



95,03


95,03


25/10/12
18/08/50
F



48,78


48,78


25/10/12
06/01/91
F



64,32


64,32


25/10/12
05/03/54
F



74,14


74,14


25/10/12
12/01/28
M



48,15


48,15


25/10/12
09/05/62
M



120,8


120,80


25/10/12
10/04/44
F



64,35


64,35


25/10/12
07/06/61
F



89,42


89,42


25/10/12
13/04/31
M



40,38


40,38


25/10/12
24/05/49
M



100,98


100,98


25/10/12
I risultati ottenuti in cockroft_mw (cioè così come vengono memorizzati in Millewin), non permettono operazioni matematiche in quanto come separatore dei decimali viene usata la virgola, mentre quelli di cockroft_blasio si, in quanto viene effettuata la conversione della virgola in punto. La colonna _egrf_cervino_ rimane sempre vuota pur inserendo manualmente un valore con il punto come separatore.

_________________
L'Amministratore
Giuseppe Blasio
avatar
Admin
Admin
Admin

Messaggi : 521
Punti : 3383
Voti per importanza dei messaggi : 85
Data d'iscrizione : 20.02.11
Località : CASERTA

Visualizza il profilo http://utentimillewin.forumattivo.it

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  nanci giacinto il Gio 25 Ott 2012 - 18:53

ciao infatti nella query di Cervino con eGRF mi da risultato zero e mi da zero se sostituisco (sempre nella query di Cervino) cockroft ad eGRF. I trenta pz estratti con la sua query (sempre Cervino) li ottengo se escludo completamente la limitazione della filtrazione glomerulare. I trenta estratti soddisfano tutti le altre clausole. grazie
avatar
nanci giacinto
Membro Junior
Membro Junior

Messaggi : 126
Punti : 2916
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11

Visualizza il profilo

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  Cervino il Ven 26 Ott 2012 - 2:44

Salve, Mi scuso per l' imprecisione ma ovviamente vi era un problema di formattazione del valore estratto nella stima del GRF ( Non uso il calcolo automatico della clearance in MW da oltre 2 anni );
Ringrazio Giuseppe, Admin del forum, per il suo contributo illuminante , suggerisco pertanto a Nancy la seguente modifica ( adattare eventualmente le clausole ) :

Select Distinct Cast( p.cognome As Char(15)), p.nome, Cast( Convert( VarChar(10), p.nascita, 111) As Char(15)) As nascita, p.sesso,

(Select Cast( Convert( VarChar(10), b.data_open, 111) As Char(15)) From cart_pazpbl b Where b.codice = p.codice And b.cp_code Like '250%' And Not (b.pb_status = 'I' And b.modalita ='A'))
_DM_onset_,

(Select Distinct 1 From cart_terap t Where t.codice = p.codice
And ( t.co_atc Like 'A10BA02' Or t.co_atc Like 'A10BD02%' Or t.co_atc Like 'A10BD03%'
Or t.co_atc Like 'A0BD05' Or t.co_atc Like 'A10BD07%' Or t.co_atc Like 'A10BD08%')
And t.data_open Between query_d-180 And query_d )
_metformina_e_ass_,

(Select Distinct 1 From cart_terap t Where t.codice = p.codice And ( t.co_atc Like 'A10BB%' Or t.co_atc Like 'A10BF%' Or t.co_atc Like 'A10BG%' Or t.co_atc Like 'A10BH%' Or t.co_atc Like 'A10BX04' Or t.co_atc Like 'A10BX%' Or t.co_atc Like 'A10BD04' Or t.co_atc Like 'A10BD06' )
And t.data_open Between query_d-180 And query_d )
_antidiabetici_altri_,

(Select Distinct 1 From cart_terap t Where t.codice=p.codice And t.co_atc Like 'A10A%'
And t.data_open Between query_d-180 And query_d )
_insulina_,

(Select Cast( a.ac_val As Dec(4,1)) From cart_accert a Where a.codice = p.codice And ac_des Like '%BMI%'
And a.ac_val Is Not Null And Not Exists (Select a1.codice From cart_accert a1
Where a.codice = a1.codice And a1.ac_des Like '%BMI%' 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)
And a.data_open Between query_d-8000 And query_d )
_Bmi_,

(Select If Locate( a.ac_val,',') > 0 Then Cast( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')) As Dec(4,1)) Else
Cast( a.ac_val As Dec(4,1)) Endif From cart_accert a Where a.codice=p.codice And
(a.ac_des Like 'Emoglobina%Glicata') And a.ac_val Is Not Null And Not Exists (Select a1.codice
From cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like 'Emoglobina%Glicata'
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 ) And a.data_open Between query_d-8000 And query_d )
_HbA1c_,

(Select If Locate( a.ac_val,',') > 0 Then Cast( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')) As Dec(3,2)) Else
Cast( a.ac_val As Dec(3,2)) Endif From cart_accert a Where a.codice=p.codice And a.ac_des Like 'Creatinina' And a.ac_val Is Not Null And Not Exists (Select a1.codice From
cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like '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 )
And a.data_open Between query_d-8000 And query_d )
_creatinina_,

(Select If Locate( a.ac_val,',') > 0 Then Cast( Round( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')), 0) As Int) Else
Cast( Round( a.ac_val, 0) As Int) Endif From cart_accert a Where a.codice=p.codice And a.ac_des Like '%Cockcroft%' And a.ac_val Is Not Null And Not Exists (Select a1.codice From
cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like '%Cockcroft%' 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 )
And a.data_open Between query_d-8000 And query_d )
_eGRF_,

Today() As query_d

FROM ( pazienti p Left Outer Join nos_002 n On p.codice = n.codice )
Left Outer Join v_utenti u On u.userid = n.pa_medi
Where u.codice_regionale Like '%' And p.pa_convenzione Like 'S'
And ( pa_drevoca Is Null Or pa_drevoca > query_d Or ( pa_drevoca Between query_d-365 And query_d And motivo_revoca = 'S')) And ( pa_dscelta Is Null Or pa_dscelta < query_d )
And p.nascita < query_d And ( p.decesso Is Null Or p.decesso < query_d )
And DateDiff ( hh, p.nascita, Today())/8766 Between 40 And 70
And _DM_onset_ Is Not Null And _BMI_ > 28 And _HbA1c_ <69
And _creatinina_ < 1.4 And _eGRF_ > 60
And ( _metformina_e_ass_ Is Not Null Or _antidiabetici_altri_ Is Not Null )
And p.codice Not In ( Select l.codice From cart_problemi l , cart_pazpbl b Where l.codice=p.codice And ( l.cp_code Like '574%' Or l.cp_code Like '575%' Or l.cp_code Like '576%' )
And l.pb_code = b.pb_code And Not ( b.pb_status = 'I' And modalita = 'A' ) And b.certezza <> 'S' )
Order By nascita desc, p.cognome, p.nome


Qualche problema marginale resta, in quanto restituisce sul mio mille.db alcune righe con valore 0 ( in caso di accertamento non eseguito e/o risultato non inserito e quindi con valore Nullo ) anzichè il risultato non nullo precedente .
Se il set estratto non dovesse essere soddisfacente, proverei a sostituire la subquery _eGRF_ con :

(Select If Locate( a.ac_val,',') > 0 Then Cast( Left( a.ac_val, Locate( a.ac_val,',')-1) + '.'
+ Right( a.ac_val, Length( a.ac_val) - Locate( a.ac_val, ',')) As Dec( 5,2)) Else
Cast( a.ac_val As Dec( 5,2)) Endif From cart_accert a Where a.codice=p.codice And a.ac_des Like '%Cockcroft%' And a.ac_val Is Not Null And Not Exists (Select a1.codice From
cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like '%Cockcroft%' 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 )
And a.data_open Between query_d-8000 And query_d )
_eGRF_,


Ma il fatto piu' sorprendente è che le subquery del tipo :

(Select (If charindex(',',ac_val)>0 then cast(substring( ac_val,1,(charindex(',',ac_val) - 1 )) + '.' +
substring(ac_val, (charindex(',',ac_val) +1 )) AS dec (7,2)) else cast(ac_val AS dec (7,2)) endif) From cart_accert a Where a.codice=p.codice And a.Ac_Nt_Code = 'MW_3952' And a.ac_val Is Not Null And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.Ac_Nt_Code = 'MW_3952' AND STRING (DATEFORMAT(a1.data_open, 'YYYYMMDD'), a1.ora) >STRING (DATEFORMAT(a.data_open, 'YYYYMMDD'), a.ora) And a1.ac_val Is Not Null)) _Cockroft_,


sul mio Mille.db non funzionano ( 0 righe estratte ) e di conseguenza , non senza fatica, ho dovuto cosi modificarle :

(Select (If CharIndex(',', Max(ac_val))>0 Then Cast( SubString( Max( ac_val),1,( CharIndex(',', Max( ac_val)) - 1 )) + '.' + SubString( Max( ac_val), ( CharIndex(',', Max( ac_val)) +1 )) As Dec (5,2)) Else Cast( Max( a.ac_val) As Dec (7,2)) Endif) From cart_accert a Where a.codice=p.codice And a.Ac_Nt_Code = 'MW_3952' And a.ac_val Is Not Null And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.Ac_Nt_Code = 'MW_3952' And
String( DateFormat( a1.data_open, 'yyyymmdd'), a1.ora) > String( DateFormat(a.data_open, 'yyyymmdd'), a.ora) And a1.ac_val Is Not Null) And a.data_open Between query_8000-span And query_d )
_Cockcroft_,


in tal modo sono efficienti come quelle classiche che utilizzano il campo rowid

In caso di accertamento doppio con la stessa data, la subquery classica estrae quello inserito per primo e quella innovativa estrae quello inserito in seguito ( risultato prevedibile ? forse, con l' utilizzo della funzione Max ).

Grazie a Tutti per il contributo , Vi saluto , Sergio Tomasini , Orzivecchi ( BS )


nanci giacinto ha scritto:ciao infatti nella query di Cervino con eGRF mi da risultato zero e mi da zero se sostituisco (sempre nella query di Cervino) cockroft ad eGRF. I trenta pz estratti con la sua query (sempre Cervino) li ottengo se escludo completamente la limitazione della filtrazione glomerulare. I trenta estratti soddisfano tutti le altre clausole. grazie

Cervino
Membro Junior
Membro Junior

Messaggi : 219
Punti : 2960
Voti per importanza dei messaggi : 16
Data d'iscrizione : 03.03.11
Età : 63
Località : Orzivecchi (BS)

Visualizza il profilo

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  Admin il Ven 26 Ott 2012 - 19:59

L' SQL di Millewin non finisce mai di stupire. Nessuna delle subquery approntate da Sergio, nel mio caso, da risultati, tranne:

(Select (If CharIndex(',', Max(ac_val))>0 Then Cast( SubString( Max( ac_val),1,( CharIndex(',', Max( ac_val)) - 1 )) + '.' + SubString( Max( ac_val), ( CharIndex(',', Max( ac_val)) +1 )) As Dec (5,2)) Else Cast( Max( a.ac_val) As Dec (7,2)) Endif) From cart_accert a Where a.codice=p.codice And a.Ac_Nt_Code = 'MW_3952' And a.ac_val Is Not Null And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.Ac_Nt_Code = 'MW_3952' And
String( DateFormat( a1.data_open, 'yyyymmdd'), a1.ora) > String( DateFormat(a.data_open, 'yyyymmdd'), a.ora) And a1.ac_val Is Not Null))


Quindi direi di considerarla come di riferimento in quanto, fino a prova contraria, dovrebbe essere universalmente accettata. L'indicazione di max(ac_val) è importante in caso di valori di un accertamento scritto più volte lo stesso giorno ed entro lo stesso minuto (valori contemporanei) perché l'estrazione funziona solo in caso di valori univoci altrimenti da risultato 0. Se millewin incontra 2 o più valori rispondenti agli stessi requisiti, non sapendo cosa sceglire non ne sceglie nessuno. E' questa, dunque, una trovata necessaria, perché al momento non ne conosciamo altre, ma non sempre estrae il valore dell'ultimo accertamento scritto in contemporanea, ma quello di "valore maggiore". Ma in questo caso il valore maggiore dipende da come abitualmente si registrano i valori stessi, se con la virgola o con il punto. Infatti nel primo caso, come più volte detto, millewin interpreta il valore come testo, nel secondo come numero. Lo scopo è quello di costringere Millewin a fare comunque una scelta.

Comunque queste sono delle sottigliezze che dal punto di vista pratico in genere hanno scarsa rilevanza.

Piuttosto, un limite alquanto importante quando si eseguono estrazioni che richiedono operazioni su numeri, è quello che vengono esclusi tutti quei casi in cui come risultato dell'accertamento non è scritto il valore numerico ma semplicemente "norm." o "fuori norma".

Cosa ne pensate della seguente alternatiiva:

Select distinct p.cognome, p.Nome, p.nascita, CAST(YEARS(p.nascita, Today()) as CHAR (4)) eta, p.sesso,
(Select max(a.data_open) From cart_accert a Where a.codice=p.codice And a.ac_des Like 'Creatinina' And a.ac_val >'' And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like 'Creatinina' AND a1.data_open >a.data_open And a1.ac_val >'')) _Data_,


(Select IF max(ac_val) like 'norm%' THEN CAST('0' as DEC (5,2))
ELSE IF max(ac_val) like '%norma' THEN CAST('99' as DEC (5,2))
ELSE If CharIndex(',', Max(ac_val))>0 Then Cast( SubString( Max( ac_val),1,( CharIndex(',', Max( ac_val)) - 1 )) + '.' + SubString( Max( ac_val), ( CharIndex(',', Max( ac_val)) +1 )) As Dec (5,2)) Else Cast( Max( a.ac_val) As Dec (5,2)) Endif Endif Endif From cart_accert a Where a.codice=p.codice And a.ac_des Like 'Creatinina' And a.ac_val >'' And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice=a.codice And a1.ac_des Like 'Creatinina' AND STRING (DATEFORMAT(a1.data_open, 'YYYYMMDD'), a1.data_upd) >STRING (DATEFORMAT(a.data_open, 'YYYYMMDD'), a.data_upd) And a1.ac_val >''))_Creatinina_


From cart_accert a , pazienti p
Where a.codice=p.codice
And a.ac_des Like 'Creatinina%'
and ac_val >''
Order by 1,2


Ha il pregio di evitare valori contemporanei facendo riferimento anche alla data di inserimento/aggiornamento, e quindi considera il valore inserito più di recente. Inoltre rappresenta un tentativo per considerare anche i valori tipo norm. e fuori norma che vengono indicati con 0 e 99 rispettivamente.

_________________
L'Amministratore
Giuseppe Blasio
avatar
Admin
Admin
Admin

Messaggi : 521
Punti : 3383
Voti per importanza dei messaggi : 85
Data d'iscrizione : 20.02.11
Località : CASERTA

Visualizza il profilo http://utentimillewin.forumattivo.it

Torna in alto Andare in basso

Re: pz diabetici e altro

Messaggio  Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto

- Argomenti simili

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