pz diabetici e altro
3 partecipanti
Pagina 1 di 1
pz diabetici e altro
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
nanci giacinto- Membro Junior
- Messaggi : 128
Punti : 5208
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11
Re: pz diabetici e altro
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)
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
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: pz diabetici e altro
un grazie di cuore per l'aiuto. purtroppo mi da risultato zero. ciao nanci
nanci giacinto- Membro Junior
- Messaggi : 128
Punti : 5208
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11
Re: pz diabetici e altro
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 )
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
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: pz diabetici e altro
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.
nanci giacinto- Membro Junior
- Messaggi : 128
Punti : 5208
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11
Re: pz diabetici e altro
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 )
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
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: pz diabetici e altro
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.
nanci giacinto- Membro Junior
- Messaggi : 128
Punti : 5208
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11
Re: pz diabetici e altro
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
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
Re: pz diabetici e altro
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.
nanci giacinto- Membro Junior
- Messaggi : 128
Punti : 5208
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11
Re: pz diabetici e altro
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 )
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
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: pz diabetici e altro
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 ?
Re: pz diabetici e altro
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:
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.
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 |
Re: pz diabetici e altro
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
nanci giacinto- Membro Junior
- Messaggi : 128
Punti : 5208
Voti per importanza dei messaggi : -1
Data d'iscrizione : 02.03.11
Re: pz diabetici e altro
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 )
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
- Messaggi : 245
Punti : 5280
Voti per importanza dei messaggi : 22
Data d'iscrizione : 03.03.11
Età : 70
Località : Orzivecchi (BS)
Re: pz diabetici e altro
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.
(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.
Argomenti simili
» BMI in diabetici
» Report diabetici
» diabetici ed statine
» SCREENING E MONITORAGGIO PZ DIABETICI
» PA da uno all'altro
» Report diabetici
» diabetici ed statine
» SCREENING E MONITORAGGIO PZ DIABETICI
» PA da uno all'altro
Pagina 1 di 1
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.