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

SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Pagina 1 di 2 1, 2  Seguente

Andare in basso

SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Sab 5 Nov 2011 - 23:20

Qualcuno mi aiuta a capire perché questa DISTINCT non funziona?
Volendo estrarre tutti i pz a cui è stato calcolato il BMI DISTINCT non mi riporta solo l'ultimo rilievo ma mostra invece tutti i BMI rilevati per quel paziente:

SELECT distinct cognome, nome,datavisita, accertamento, risults
FROM v_accertamenti
WHERE accertamento Like 'BMI%'
and ((today()-datanasc)/365) between '40' and '60'
ORDER By cognome, nome,datavisita


Ultima modifica di Lucio Mignone il Mer 30 Nov 2011 - 0:34, modificato 2 volte
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Admin il Dom 6 Nov 2011 - 1:29

La clausola DISTINCT dice al motore database di prendere solo il primo record nel caso vi siano più record con gli stessi dati, ma in questo caso i dati riferiti a data visita e valori del BMI sono differenti, quindi la clausola non può essere usata.

Prova questa:

SELECT a.cognome, a.nome, Years(a.datanasc, TODAY ()) as Eta, a.sesso, MAX(a.datavisita) Data_Visita, a.accertamento, a.risults Risultato
FROM v_accertamenti a
WHERE a. accertamento Like 'BMI%'
AND not exists (select codice
FROM v_accertamenti a1
WHERE a1.codice=a.codice AND a1.accertamento=a.accertamento AND a1.datavisita>a.datavisita)
AND eta between '40' and '60'
GROUP BY cognome, nome,a.datanasc, sesso, datavisita, accertamento, risults
ORDER By 1,2


Ultima modifica di Admin il Dom 6 Nov 2011 - 2:12, modificato 1 volta

_________________
L'Amministratore
Giuseppe Blasio
Admin
Admin
Admin
Admin

Messaggi : 525
Punti : 3605
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: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Cervino il Dom 6 Nov 2011 - 1:54

Prova con :

SELECT Distinct cognome, nome, ((Today()-datanasc)/365) As eta, ' ', Max(datavisita) As Bmi_d, accertamento As Bmi, Cast(risultn As Dec(4,1)) As Bmi_v
FROM v_accertamenti a
Where accertamento Like '%BMI%' And Not Exists
(Select a1.codice FROM v_Accertamenti a1 Where a1.codice = a.codice And a1.accertamento Like '%BMI%' And a1.datavisita > a.datavisita)
And eta Between 40 And 60
Group By cognome, nome, eta, accertamento, risults
Order By 1, 2, 3

Non ho familiarità con le viste, per cui non garantisco il risultato .

Rispetto all' estrazione diretta da mio mille.db con la query :

Select Distinct Cast(cognome As Char(16)), nome, p.sesso, p.nascita, (Year(Today())-Year(p.nascita)) As eta,
(Select Cast(a.ac_val+0 As Dec(4,1)) From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609' 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_code Like '2609' And (a1.data_open > a.data_open Or (a1.data_open
= a.data_open And a1.rowid > a.rowid)) And a1.ac_val Is Not Null))
_bmi_v_, ' ',
(Select a.data_open From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609' 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_code Like '2609' And (a1.data_open > a.data_open Or (a1.data_open
= a.data_open And a1.rowid > a.rowid)) And a1.ac_val Is Not Null))
_Bmi_d_,
(IF _bmi_v_< '18.5' Then ' SottoPeso ' Else IF ( _bmi_v_ Between '18.5' And '24.9') Then ' NormoPeso ' Else IF (_bmi_v_ Between '25' And '29.9') Then ' Sovrappeso ' Else IF (_bmi_v_ Between '30' And '34.9') Then ' Obesità I ' Else IF (_bmi_v_ Between '35' And '39.9') Then ' Obesità II ' Else IF ( _bmi_v_ >'39.9') Then ' Obesità III ' Else ' ? ' Endif Endif Endif Endif Endif Endif)
_commento_
FROM pazienti p , nos_002 n
Where p.codice=n.codice
And n.pa_medi ''
And eta Between 40 And 60
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca > Today()-365 And motivo_revoca ='S' ))
And p.pa_convenzione = 'S'
Order By 1, 2, 3

i due sets ottenuti presentano differenze non trascurabili .

Un saluto da Sergio Tomasini , Orzivecchi ( BS )

Cervino
Membro Junior
Membro Junior

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

Visualizza il profilo

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Dom 6 Nov 2011 - 9:51

Grazie a Giuseppe e Sergio per avermi aiutato.
Non riuscivo a capire perchè Distinct non funzionasse. Ora lo so!

Grazie anche a tutti i colleghi del forum che in ogni occasione puntualmente mi aiutano e mi consentono ogni volta di capire qualcosa in più e compiere piccoli passi per essere un po' più autonomo...
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Dom 6 Nov 2011 - 10:10


Prova con :

SELECT Distinct cognome, nome,
((Today()-datanasc)/365) As eta, ' ', Max(datavisita) As Bmi_d,
accertamento As Bmi, Cast(risultn As Dec(4,1)) As Bmi_v
FROM v_accertamenti a
Where accertamento Like '%BMI%' And Not Exists
(Select
a1.codice FROM v_Accertamenti a1 Where a1.codice = a.codice And
a1.accertamento Like '%BMI%' And a1.datavisita > a.datavisita)
And eta Between 40 And 60
Group By cognome, nome, eta, accertamento, risults
Order By 1, 2, 3

Questa mi da errore ed ho capito perché: in GROUP BY c'è risultS al posto di risultN


Cervino ha scritto:Prova con :

.........................

Rispetto all' estrazione diretta da mio mille.db con la query :

Select Distinct Cast(cognome As Char(16)), nome, p.sesso, p.nascita, (Year(Today())-Year(p.nascita)) As eta,
(Select Cast(a.ac_val+0 As Dec(4,1)) From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609' 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_code Like '2609' And (a1.data_open > a.data_open Or (a1.data_open
= a.data_open And a1.rowid > a.rowid)) And a1.ac_val Is Not Null))
_bmi_v_, ' ',
(Select a.data_open From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609' 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_code Like '2609' And (a1.data_open > a.data_open Or (a1.data_open
= a.data_open And a1.rowid > a.rowid)) And a1.ac_val Is Not Null))
_Bmi_d_,
(IF _bmi_v_< '18.5' Then ' SottoPeso ' Else IF ( _bmi_v_ Between '18.5' And '24.9') Then ' NormoPeso ' Else IF (_bmi_v_ Between '25' And '29.9') Then ' Sovrappeso ' Else IF (_bmi_v_ Between '30' And '34.9') Then ' Obesità I ' Else IF (_bmi_v_ Between '35' And '39.9') Then ' Obesità II ' Else IF ( _bmi_v_ >'39.9') Then ' Obesità III ' Else ' ? ' Endif Endif Endif Endif Endif Endif)
_commento_
FROM pazienti p , nos_002 n
Where p.codice=n.codice
And n.pa_medi ''
And eta Between 40 And 60
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca > Today()-365 And motivo_revoca ='S' ))
And p.pa_convenzione = 'S'
Order By 1, 2, 3

i due sets ottenuti presentano differenze non trascurabili .

Un saluto da Sergio Tomasini , Orzivecchi ( BS )

Questa non mi funziona, non capisco perché...
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  GiampiMaz il Dom 6 Nov 2011 - 12:45

Salve

hai messo al posto di

And n.pa_medi ''

And n.pa_medi= tuo codice di medicine di gruppo
?
così dovrebbe funzionare ciao
giampiero
GiampiMaz
GiampiMaz
Membro Junior
Membro Junior

Messaggi : 122
Punti : 3116
Voti per importanza dei messaggi : 33
Data d'iscrizione : 20.02.11

Visualizza il profilo

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Admin il Dom 6 Nov 2011 - 12:51

Ecco (a scopo didattico nel senso che sto cercando di imparare) un rimaneggiamento della query del MAESTRO Sergio:

Select Distinct Cast(cognome As Char(16)), nome, p.sesso, p.nascita, (Year(Today())-Year(p.nascita)) As eta,
(Select Cast(a.ac_val+0 As Dec(4,1)) From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609') And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' And (a1.data_open > a.data_open)))
BMI, '-' ,
(Select a.data_open From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609') And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' And (a1.data_open > a.data_open )))
Data,
(IF BMI< '18.5' Then ' SottoPeso ' Else IF ( BMI Between '18.5' And '24.9') Then ' NormoPeso ' Else IF ( BMI Between '25' And '29.9') Then ' Sovrappeso ' Else IF ( BMI Between '30' And '34.9') Then ' Obesità I ' Else IF ( BMI Between '35' And '39.9') Then ' Obesità II ' Else IF ( BMI >'39.9') Then ' Obesità III ' Else ' ? ' Endif Endif Endif Endif Endif Endif)
_commento_
FROM pazienti p , nos_002 n
Where p.codice=n.codice
AND BMI is not null
AND p.Decesso is null
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
And p.pa_convenzione = 'S'
And eta Between 40 And 60
AND p.data_open BETWEEN '2011/01/01' AND '2011/12/31'
Order By 1, 2, 4

_________________
L'Amministratore
Giuseppe Blasio
Admin
Admin
Admin
Admin

Messaggi : 525
Punti : 3605
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: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Dom 6 Nov 2011 - 13:20

Admin ha scritto:Ecco (a scopo didattico nel senso che sto cercando di imparare) un rimaneggiamento della query del MAESTRO Sergio:

Select Distinct Cast(cognome As Char(16)), nome, p.sesso, p.nascita, (Year(Today())-Year(p.nascita)) As eta,
(Select Cast(a.ac_val+0 As Dec(4,1)) From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609') And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' And (a1.data_open > a.data_open)))
BMI, '-' ,
(Select a.data_open From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609') And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' And (a1.data_open > a.data_open )))
Data,
(IF BMI< '18.5' Then ' SottoPeso ' Else IF ( BMI Between '18.5' And '24.9') Then ' NormoPeso ' Else IF ( BMI Between '25' And '29.9') Then ' Sovrappeso ' Else IF ( BMI Between '30' And '34.9') Then ' Obesità I ' Else IF ( BMI Between '35' And '39.9') Then ' Obesità II ' Else IF ( BMI >'39.9') Then ' Obesità III ' Else ' ? ' Endif Endif Endif Endif Endif Endif)
_commento_
FROM pazienti p , nos_002 n
Where p.codice=n.codice
AND BMI is not null
AND p.Decesso is null
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
And p.pa_convenzione = 'S'
And eta Between 40 And 60
AND p.data_open BETWEEN '2011/01/01' AND '2011/12/31'
Order By 1, 2, 4

Giuseppe ottima idea il rimaneggiamento! Aiuta ad imparare.
Potresti però evidenziare (magari con un colore differente) le parti che hai modificato al fine di identificarle meglio, facilitare un confronto e cercare di capire ed apprendere le differenze?
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Dom 6 Nov 2011 - 13:25

GiampiMaz ha scritto:Salve

hai messo al posto di

And n.pa_medi ''

And n.pa_medi= tuo codice di medicine di gruppo
?
così dovrebbe funzionare ciao
giampiero

Ok Funziona.
Mi scusi Maestro per essermi fatto sfuggire il "piccolo" dettaglio...

Tu se' lo mio maestro e 'l mio autore;
tu se' solo colui da cu' io tolsi
lo bello stilo che m'ha fatto onore


Ultima modifica di Lucio Mignone il Dom 6 Nov 2011 - 17:14, modificato 1 volta
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Dom 6 Nov 2011 - 16:46

Cercando di capire meglio le query e le differenze tra la query originale di Sergio e le modifiche effettuate da Giuseppe:

La query di Sergio (quella più lunga) e modificata da Giuseppe mostra solo 32 pz su 1600 perché limita la ricerca all'ultimo anno e non mostra i pz che non hanno il BMI calcolato.

La query originale di Sergio (sempre quellla lunga) mostra 1100 pz su 1600 ma non capisco bene il criterio con il quale seleziona i 1100 pz e mostra anche i pz che non hanno il BMI calcolato.
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Admin il Dom 6 Nov 2011 - 16:58

Lucio Mignone ha scritto: Giuseppe ottima idea il rimaneggiamento! Aiuta ad imparare.
Potresti però evidenziare (magari con un colore differente) le parti che hai modificato al fine di identificarle meglio, facilitare un confronto e cercare di capire ed apprendere le differenze?

Ho semplicemente "sfrondato" le subquery di clausole che di fatto non avevano alcuna azione utile (Or (a1.data_open = a.data_open And a1.rowid > a.rowid)) And a1.ac_val Is Not Null)).

Ho aggiunto o modificato alcune clausole alla fine in modo da avere effetto sull'estrazione finale:

AND BMI is not null
AND p.Decesso is null
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
And eta Between 40 And 60
AND p.data_open BETWEEN '2011/01/01' AND '2011/12/31'


Il significato non sfugge certo ad un arguto osservatore come te.

In effetti quello che più mi piace del linguaggio SQL è la possibilità di ottenere dei risultati semplicemente ragionando e questi sono tanto più efficaci quanto più chiara è la scrittura delle query, lineare, essenziale, e perché no, anche elegante. Ai Maestri rivolgo l'invito a perseguire sempre questi intenti, ciò renderà sicuramente più semplice l'apprendistato dei discepoli. Grazie.

_________________
L'Amministratore
Giuseppe Blasio
Admin
Admin
Admin
Admin

Messaggi : 525
Punti : 3605
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: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Dom 6 Nov 2011 - 17:10

Admin ha scritto:
Lucio Mignone ha scritto: Giuseppe ottima idea il rimaneggiamento! Aiuta ad imparare.
Potresti però evidenziare (magari con un colore differente) le parti che hai modificato al fine di identificarle meglio, facilitare un confronto e cercare di capire ed apprendere le differenze?

Ho semplicemente "sfrondato" le subquery di clausole che di fatto non avevano alcuna azione utile (Or (a1.data_open = a.data_open And a1.rowid > a.rowid)) And a1.ac_val Is Not Null)).

Ho aggiunto o modificato alcune clausole alla fine in modo da avere effetto sull'estrazione finale:

AND BMI is not null
AND p.Decesso is null
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
And eta Between 40 And 60
AND p.data_open BETWEEN '2011/01/01' AND '2011/12/31'


Il significato non sfugge certo ad un arguto osservatore come te.

In effetti quello che più mi piace del linguaggio SQL è la possibilità di ottenere dei risultati semplicemente ragionando e questi sono tanto più efficaci quanto più chiara è la scrittura delle query, lineare, essenziale, e perché no, anche elegante. Ai Maestri rivolgo l'invito a perseguire sempre questi intenti, ciò renderà sicuramente più semplice l'apprendistato dei discepoli. Grazie.

Grazie davvero per l'aiuto a te ed a tutti.

Quello che ancora mi rimane difficile è capire bene il giochino di questa Select

e cioé a cosa serva creare dell' a1. codice a1.accertamento a1.datavisita


Select a1.codice FROM v_Accertamenti a1 Where a1.codice = a.codice And a1.accertamento Like '%BMI%' And a1.datavisita > a.datavisita

Tu se' lo mio maestro e 'l mio autore;
tu se' solo colui da cu' io tolsi
lo bello stilo che m'ha fatto onore
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Admin il Dom 6 Nov 2011 - 18:44

Lucio Mignone ha scritto:Grazie davvero per l'aiuto a te ed a tutti.

Quello che ancora mi rimane difficile è capire bene il giochino di questa Select

e cioé a cosa serva creare dell' a1. codice a1.accertamento a1.datavisita


Select a1.codice FROM v_Accertamenti a1 Where a1.codice = a.codice And a1.accertamento Like '%BMI%' And a1.datavisita > a.datavisita

Tu se' lo mio maestro e 'l mio autore;
tu se' solo colui da cu' io tolsi
lo bello stilo che m'ha fatto onore

Questi versi fanno venire una stretta al cuore; quali illustri personaggi hanno fatto GRANDE la nostra ITALIA e quani altri oggi l'hanno fatta diventare misera. Mad

Comunque, bando alla tristezza, la selezione è semllicemente un artifizio per far comparire nell'estrazione solo i risultati più recenti. Serve cioè a selezionare una data di visita quando non ne esiste un'altra, in un'estrazione fittizia, più recente.

_________________
L'Amministratore
Giuseppe Blasio
Admin
Admin
Admin
Admin

Messaggi : 525
Punti : 3605
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: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Cervino il Lun 7 Nov 2011 - 1:18

Svariete query negli anni sono state proposte e/o modificate sul Forum di MW ( attuale e precedente ); inoltre la sincronizzazione del mille.db esclude incomprensibilmente le operazioni eseguibili da MilleUtilità ( testi, queries, ...) ed avendo almeno cinque installazioni diverse di MW e MU su vari hosts, diventa problematico cercare la soluzione ottimale senza incorrere in imprecisioni.
La prima query :

Select Distinct cognome, nome, ((Today()-datanasc)/365) As eta, ' ', Max(datavisita) As Bmi_d, accertamento As Bmi, Cast(risultn As Dec(4,1)) As Bmi_v
FROM v_accertamenti a
Where accertamento Like '%BMI%' And Not Exists
(Select a1.codice FROM v_Accertamenti a1 Where a1.codice = a.codice And a1.accertamento Like '%BMI%' And a1.datavisita > a.datavisita)
And eta Between 40 And 60
Group By cognome, nome, eta, accertamento, risults
Order By 1, 2, 3

è uguale a quella proposta quasi in contemporanea da Giuseppe; tuttavia la apparente discrepanza fra : risultn e risults è voluta e comunque sul mio mille.db funziona ( misteri delle Viste )

La seconda query è stata rimaneggiata da varie precedenti ma ad una attenta analisi è risultata a volte imprecisa; attualmente la query ottimale per estrarre il BMI escludendo il periodo della gravidanza dovrebbe forse (?) essere :


Select Cast(cognome As Char(18)), nome, sesso, nascita, (Days(nascita, Today())/365) As eta, ' ',
(Select Max(a.data_open) From cart_accert a Where a.codice = p.codice And a.ac_code Like '2609' And ac_val Is Not Null And a.codice Not IN (Select codice From cart_problemi l Where l.codice = a.codice And cp_code Like 'V22%' And (a.data_open Between l.data_open+61 And l.data_open + 340 )) And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' And a1.codice Not IN (Select codice From cart_problemi l Where l.codice = a1.codice And cp_code Like 'V22%' And (a1.data_open Between l.data_open+31 And l.data_open + 340 )) And (a1.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 Today()-10000 And Today())
_Bmi_d_,
(Select Cast(Max(a.ac_val) As Dec(4,1)) From cart_accert a Where a.codice = p.codice And ac_des Like '%BMI%' And a.data_open = _bmi_d_ )
_Bmi_v_,
(Select Cast(Max(a.ac_val) As Dec(4,1)) From cart_accert a Where a.codice = p.codice And ac_des Like 'Peso' And a.data_open = _bmi_d_ )
_Peso_,
(Select Cast(Max(a.ac_val) As Dec(4,1)) From cart_accert a Where a.codice = p.codice And ac_des Like 'Altezza' And a.data_open = _bmi_d_ )
_Altezza_,
(IF _bmi_v_< 20 And p.sesso = 'M' Then ' SottoPeso ' Else IF _bmi_v_< 19 And p.sesso = 'F' Then ' SottoPeso ' Else IF _bmi_v_ Between 20 And 24.9 And p.sesso = 'M' Then ' NormoPeso ' Else IF _bmi_v_ Between 19 And 24.9 And p.sesso = 'F' Then ' NormoPeso ' Else IF _bmi_v_ Between 25 And 29.9 Then ' Sovrappeso ' Else IF _bmi_v_ Between 30 And 34.9 Then ' Obesità I ' Else IF _bmi_v_ Between 35 And 39.9 Then ' Obesità II ' Else IF _bmi_v_ > 39.9 Then ' Obesità III ' Else ' ? ' Endif Endif Endif Endif Endif Endif Endif Endif )
As Diagnosi, Today() As DataQuery
FROM pazienti p INNER JOIN nos_002 n ON p.codice = n.codice
Where n.pa_medi Like '%' And eta >19.9 And _Bmi_v_ > 14.9
And p.pa_convenzione = 'S' And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca Between Today()-365 And Today() And motivo_revoca ='S' ))And p.decesso Is Null
Order By 7, 1, 2
in alternativa per il solo BMI :

Select Cast(cognome As Char(18)), nome, sesso, nascita, (Days(nascita, Today())/365) As eta, ' ',
(Select Cast(Max(a.ac_val) As Dec(4,1)) From cart_accert a Where a.codice = p.codice And ac_des Like '%BMI%' And a.data_open = (Select Max(a.data_open) From cart_accert a Where a.codice = p.codice And a.ac_des Like '%BMI%' And ac_val Is Not Null And a.codice Not IN (Select codice From cart_problemi l Where l.codice = a.codice And cp_code Like 'V22%' And (a.data_open Between l.data_open+61 And l.data_open + 340 )) And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_des Like '%BMI%' And a1.codice Not IN (Select codice From cart_problemi l Where l.codice = a1.codice And cp_code Like 'V22%' And (a1.data_open Between l.data_open+31 And l.data_open + 340 )) And (a1.data_open > a.data_open Or (a1.data_open = a.data_open And a1.rowid > a.rowid)) And a1.ac_val Is Not Null)))
_Bmi_v_,
(IF _bmi_v_< 20 And p.sesso = 'M' Then ' SottoPeso ' Else IF _bmi_v_< 19 And p.sesso = 'F' Then ' SottoPeso ' Else IF _bmi_v_ Between 20 And 24.9 And p.sesso = 'M' Then ' NormoPeso ' Else IF _bmi_v_ Between 19 And 24.9 And p.sesso = 'F' Then ' NormoPeso ' Else IF _bmi_v_ Between 25 And 29.9 Then ' Sovrappeso ' Else IF _bmi_v_ Between 30 And 34.9 Then ' Obesità I ' Else IF _bmi_v_ Between 35 And 39.9 Then ' Obesità II ' Else IF _bmi_v_ > 39.9 Then ' Obesità III ' Else ' ? ' Endif Endif Endif Endif Endif Endif Endif Endif )
As Diagnosi, Today() As DataQuery
FROM pazienti p INNER JOIN nos_002 n ON p.codice = n.codice
Where n.pa_medi Like '%' And eta >19.9 And _Bmi_v_ > 14.9
And p.pa_convenzione = 'S' And (n.pa_drevoca Is Null Or n.pa_drevoca > Today() Or (n.pa_drevoca Between Today()-365 And Today() And motivo_revoca ='S' ))
Order By 7, 1, 2


Ringrazio Leonardo e Giampiero per il contributo ricevuto sul vecchio Forum al riguardo.
Scrivo da Linux per cui non posso verificare eventuali errori di trascrizione.
Un saluto da Sergio , Orzivecchi (BS)


Cervino
Membro Junior
Membro Junior

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

Visualizza il profilo

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Lun 7 Nov 2011 - 8:37

Cervino ha scritto:Svariete query negli anni sono state proposte e/o modificate sul Forum di MW ( attuale e precedente ); inoltre la sincronizzazione del mille.db esclude incomprensibilmente le operazioni eseguibili da MilleUtilità ( testi, queries, ...) ed avendo almeno cinque installazioni diverse di MW e MU su vari hosts, diventa problematico cercare la soluzione ottimale senza incorrere in imprecisioni.
......
Un saluto da Sergio , Orzivecchi (BS)


Condivido. La mancata sincronizzazione di vari testi personalizzati e queries è una scocciatura.
Ti ringrazio ancora per l'aiuto, utilissimi i suggerimenti di tutti gli amici del forum, comincio a capirci qualcosa...

Se posso chiedere, non mi sono chiare queste istruzioni, ho guardato in rete ma non sono riuscito a capire molto di più:


Cast(Max(a.ac_val) As Dec(4,1) cast trasforma un numero da un formato ad un altro? Ma in che modo esattamente puo' essere utilizzata? Max prende ilvalore più recente se ce ne sonon molti? Dec stabilisce che il formato del numero decimale sia 4 cifre prima della virgola ed una dopo la virgola?

cast(a.ac_val AS FLOAT) Float proprio non l'ho capita...


risultn e risults
non conoscendo bene la struttura dl database non capisco la differenza

Sui manuali sql che ci sono in rete queste istruzioni più complesse sono poco presenti. Potete suggerirmi un manuale oppure un testo per approfondire?


Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  draleo83 il Lun 7 Nov 2011 - 16:55

Ricordo che sul vecchio Forum scrivemmo (io, Sergio ed altri ) parecchie query sul BMI, che diedero atto a lunghe ,accese, dicussioni tra noi di tipo tecnico, in quanto esistevano problemi di non facile ed univoca soluzione . Oggi, purtroppo ho perso tutto quanto. Non le avevo trascritte ( o se trascritte non so più dove siano andate a finire) e mi piacerebbe rileggerle

Qualcuno è in grado di rintracciarle in qualche modo ?

draleo
draleo83
draleo83
Membro Junior
Membro Junior

Messaggi : 217
Punti : 3225
Voti per importanza dei messaggi : 24
Data d'iscrizione : 21.02.11

Visualizza il profilo

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Admin il Lun 7 Nov 2011 - 18:02

Lucio Mignone ha scritto:.....
Se posso chiedere, non mi sono chiare queste istruzioni, ho guardato in rete ma non sono riuscito a capire molto di più:


Cast(Max(a.ac_val) As Dec(4,1) cast trasforma un numero da un formato ad un altro? Ma in che modo esattamente puo' essere utilizzata? Max prende ilvalore più recente se ce ne sonon molti? Dec stabilisce che il formato del numero decimale sia 4 cifre prima della virgola ed una dopo la virgola?


cast(a.ac_val AS FLOAT) Float proprio non l'ho capita...

risultn e risults
non conoscendo bene la struttura dl database non capisco la differenza

Sui manuali sql che ci sono in rete queste istruzioni più complesse sono poco presenti. Potete suggerirmi un manuale oppure un testo per approfondire?

Cast(valore) As Dec(4,1) indica proprio un numero di 4 cifre intere ed una cifra decimale. Cast si usa appunto per variare il formato di un campo. Un altro uso è ad es: CAST(campo) AS char(20)). In questo caso determina la larghezza della colonna in cui è espresso il campo.

Max è una funzione di aggregazione insieme ad altre:

COUNT (nome campo): conta le righe estratte

SUM (nome campo): somma i valori, solo se numerici

AVG (nome campo): estrae il valore medio

MIN (nome campo): estrae il valore minimo

MAX (nome campo): estrae il valore massimo


Float non so bene cosa significhi ma ha a che vedere con il formato dei numeri decimali con virgola variabile come quelli con notazione scientifica. Ad esempio il numero 12345678901 è indicato come 1.23457e+010. Si tratta di una funzione numerica come altre di uso certamente più corrente:

ROUND(campo,num_cifre): restituisce il valore numerico del campo arrotondato al num di cifre

TRUNCATE(campo,num_cifre):restituisce il valore numerico del campo troncato al num di cifre

CEILING(campo): Restituisce il num intero più vicino per eccesso

FLOOR(campo) : Restituisce il num intero più vicino per difetto

MOD(campo1,campo2): restituisce il resto della divisione campo1/campo2

SQRT(campo): restituisce la radice quadrata

POWER (campo1,campo2): restituisce il campo 1 elevato alla potenza campo2

Riguardo a RisultS e RisultN si tratta di due campi diversi nel modo di indicare i valori numerici, numero di caratteri (24 0 15) ed il modo di usare, per separare i decimali, il punto o la virgola. Queste differenze spesso causano variazione dei risultati delle estrazioni. Tempo fa sul forum millewin ci fu un'ampia dissertazione sull'argomento, ma adesso non ricordo bene tutte le differenze per cui mi appello all'aiuto dei Maestri che a suo tempo la animarono. Purtroppo la chiusura del forum ha fatto perdere una fonte inestimabile di utility create da tanti di noi, si è trattato di un FURTO vero e proprio.

_________________
L'Amministratore
Giuseppe Blasio
Admin
Admin
Admin
Admin

Messaggi : 525
Punti : 3605
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: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  GiampiMaz il Mar 8 Nov 2011 - 5:24

Sull'uso dei numeri nel SQL ed in Millewin si è tornati più volte, posso riproporre un mio schema.

L'SQL è anglo-americano e riconosce come numeri solo le cifre col punto, se c'è la virgola le considera come una stringa alfabetica. Di conseguenza tutte le operazioni matematiche da + - a > < a comandi come AVG (media) ecc si possono fare solo se si è scritto i dati col punto per i decimali. La visualizzazione non pone naturalmente problemi, è indifferente se sia numero o stringa.
Ciò è vero se si usano le tabelle. Le viste, che sono una rielaborazione delle tabelle fatta dal programma, funzionano in modo leggermente diverso. Nella vista V_ACCERTAMENTI vi sono due campi che mostrano il risultato: Risults che è ciò che hai scritto (col punto o con la virgola), se è col punto lo potrai utilizzare come numero se è con la virgola no, poi vi è il campo Risultn, questo è una rielaborazione del programma che mostra il numero di risultn con la virgola sia che tu l'abbia scritto col punto che con la virgola, (tuttavia internamente lo deve memorizzare col punto) e lo considera numero e su di esso si possono fare tutte le operazioni matematiche normalmente anche se apparentemente ha la virgola.
Millewin ha evidentemente scelto di essere userfrendly privilegiando l'uso italiano della virgola e ha messo a disposizione una vista adatta. Inoltre se si immettono i dati col tastierino numerico automaticamente vengono scritti con la virgola (e perciò con problemi usando le Tabelle).
Quindi a seconda di quello che vuoi ottenere dovrai usare le viste con risultn o risults che permettono di scrivere i numeri come ci pare.
Se vuoi usare le Tabelle o utilizzi sempre il punto per i decimali (MA NOI SIAMO ITALIANI!) o per superare l'ostacolo si può riformattare il numero sostituendo la virgola col punto prima di eseguire l'operazione matematica. Esempio riformattiamo ac_val prima di usare il comando AVG:
AVG (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)

Al posto di ac_val potrà essere messo il campo numerico necessario.


CHARINDEX('stringa cercata',campo) ritorna la posizione della stringa cercata nel campo, se non c'è ritorna 0 (zero)
SUBSTRING(campo, da quale carattere partire, quanti caratteri vogliamo) ritorna il tratto di stringa indicato

giampiero
GiampiMaz
GiampiMaz
Membro Junior
Membro Junior

Messaggi : 122
Punti : 3116
Voti per importanza dei messaggi : 33
Data d'iscrizione : 20.02.11

Visualizza il profilo

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Mar 8 Nov 2011 - 14:54

GiampiMaz ha scritto:Sull'uso dei numeri nel SQL ed in Millewin si è tornati più volte, posso riproporre un mio schema.

L'SQL è anglo-americano e riconosce come numeri solo le cifre col punto, se c'è la virgola le considera come una stringa alfabetica. Di conseguenza tutte le operazioni matematiche da + - a > < a comandi come AVG (media) ecc si possono fare solo se si è scritto i dati col punto per i decimali. La visualizzazione non pone naturalmente problemi, è indifferente se sia numero o stringa.
Ciò è vero se si usano le tabelle. Le viste, che sono una rielaborazione delle tabelle fatta dal programma, funzionano in modo leggermente diverso. Nella vista V_ACCERTAMENTI vi sono due campi che mostrano il risultato: Risults che è ciò che hai scritto (col punto o con la virgola), se è col punto lo potrai utilizzare come numero se è con la virgola no, poi vi è il campo Risultn, questo è una rielaborazione del programma che mostra il numero di risultn con la virgola sia che tu l'abbia scritto col punto che con la virgola, (tuttavia internamente lo deve memorizzare col punto) e lo considera numero e su di esso si possono fare tutte le operazioni matematiche normalmente anche se apparentemente ha la virgola.
Millewin ha evidentemente scelto di essere userfrendly privilegiando l'uso italiano della virgola e ha messo a disposizione una vista adatta. Inoltre se si immettono i dati col tastierino numerico automaticamente vengono scritti con la virgola (e perciò con problemi usando le Tabelle).
Quindi a seconda di quello che vuoi ottenere dovrai usare le viste con risultn o risults che permettono di scrivere i numeri come ci pare.
Se vuoi usare le Tabelle o utilizzi sempre il punto per i decimali (MA NOI SIAMO ITALIANI!) o per superare l'ostacolo si può riformattare il numero sostituendo la virgola col punto prima di eseguire l'operazione matematica. Esempio riformattiamo ac_val prima di usare il comando AVG:
AVG (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)

Al posto di ac_val potrà essere messo il campo numerico necessario.


CHARINDEX('stringa cercata',campo) ritorna la posizione della stringa cercata nel campo, se non c'è ritorna 0 (zero)
SUBSTRING(campo, da quale carattere partire, quanti caratteri vogliamo) ritorna il tratto di stringa indicato

giampiero

Shocked no comment!
Tu se' lo mio maestro e 'l mio autore;
tu se' solo colui da cu' io tolsi
lo bello stilo che m'ha fatto onore
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  viscardo il Dom 27 Nov 2011 - 21:28

Admin ha scritto:Ecco (a scopo didattico nel senso che sto cercando di imparare) un rimaneggiamento della query del MAESTRO Sergio:

Select Distinct Cast(cognome As Char(16)), nome, p.sesso, p.nascita, (Year(Today())-Year(p.nascita)) As eta,
(Select Cast(a.ac_val+0 As Dec(4,1)) From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609') And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' And (a1.data_open > a.data_open)))
BMI, '-' ,
(Select a.data_open From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609') And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' And (a1.data_open > a.data_open )))
Data,
(IF BMI< '18.5' Then ' SottoPeso ' Else IF ( BMI Between '18.5' And '24.9') Then ' NormoPeso ' Else IF ( BMI Between '25' And '29.9') Then ' Sovrappeso ' Else IF ( BMI Between '30' And '34.9') Then ' Obesità I ' Else IF ( BMI Between '35' And '39.9') Then ' Obesità II ' Else IF ( BMI >'39.9') Then ' Obesità III ' Else ' ? ' Endif Endif Endif Endif Endif Endif)
_commento_
FROM pazienti p , nos_002 n
Where p.codice=n.codice
AND BMI is not null
AND p.Decesso is null
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
And p.pa_convenzione = 'S'
And eta Between 40 And 60
AND p.data_open BETWEEN '2011/01/01' AND '2011/12/31'
Order By 1, 2, 4

La query è molto utile, e ringrazio anch'io.
Si può fare in modo che mostri alla fine dell'elenco anche i pazienti a cui non è stato fatto il bmi?

viscardo
Nuovo Membro
Nuovo Membro

Messaggi : 26
Punti : 2898
Voti per importanza dei messaggi : 10
Data d'iscrizione : 22.05.11

Visualizza il profilo

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Admin il Dom 27 Nov 2011 - 22:32

viscardo ha scritto:
Admin ha scritto:Ecco (a scopo didattico nel senso che sto cercando di imparare) un rimaneggiamento della query del MAESTRO Sergio:

Select Distinct Cast(cognome As Char(16)), nome, p.sesso, p.nascita, (Year(Today())-Year(p.nascita)) As eta,
(Select Cast(a.ac_val+0 As Dec(4,1)) From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609') And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' And (a1.data_open > a.data_open)))
BMI, '-' ,
(Select a.data_open From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609') And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' And (a1.data_open > a.data_open )))
Data,
(IF BMI< '18.5' Then ' SottoPeso ' Else IF ( BMI Between '18.5' And '24.9') Then ' NormoPeso ' Else IF ( BMI Between '25' And '29.9') Then ' Sovrappeso ' Else IF ( BMI Between '30' And '34.9') Then ' Obesità I ' Else IF ( BMI Between '35' And '39.9') Then ' Obesità II ' Else IF ( BMI >'39.9') Then ' Obesità III ' Else ' ? ' Endif Endif Endif Endif Endif Endif)
_commento_
FROM pazienti p , nos_002 n
Where p.codice=n.codice
AND BMI is not null
AND p.Decesso is null
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
And p.pa_convenzione = 'S'
And eta Between 40 And 60
AND p.data_open BETWEEN '2011/01/01' AND '2011/12/31'
Order By 1, 2, 4

La query è molto utile, e ringrazio anch'io.
Si può fare in modo che mostri alla fine dell'elenco anche i pazienti a cui non è stato fatto il bmi?

Basta cancellare il rigo: AND BMI is not null - invece cambiandolo in: AND BMI is null si elencano i pzienti a cui non è stato mai eseguito un BMI, e poi volendo si può variare il range di età da 40 a 60 anni cambiando il rigo: And eta Between 40 And 60 - ed il periodo di osservazione cambiando: AND p.data_open BETWEEN '2011/01/01' AND '2011/12/31'

_________________
L'Amministratore
Giuseppe Blasio
Admin
Admin
Admin
Admin

Messaggi : 525
Punti : 3605
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: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Lun 28 Nov 2011 - 0:04

Admin ha scritto:
viscardo ha scritto:
Admin ha scritto:Ecco (a scopo didattico nel senso che sto cercando di imparare) un rimaneggiamento della query del MAESTRO Sergio:

Select Distinct Cast(cognome As Char(16)), nome, p.sesso, p.nascita, (Year(Today())-Year(p.nascita)) As eta,
(Select Cast(a.ac_val+0 As Dec(4,1)) From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609') And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' And (a1.data_open > a.data_open)))
BMI, '-' ,
(Select a.data_open From cart_accert a Where ( a.codice=p.codice And a.ac_code Like '2609') And Not Exists (Select a1.codice From cart_accert a1 Where a1.codice = a.codice And a1.ac_code Like '2609' And (a1.data_open > a.data_open )))
Data,
(IF BMI< '18.5' Then ' SottoPeso ' Else IF ( BMI Between '18.5' And '24.9') Then ' NormoPeso ' Else IF ( BMI Between '25' And '29.9') Then ' Sovrappeso ' Else IF ( BMI Between '30' And '34.9') Then ' Obesità I ' Else IF ( BMI Between '35' And '39.9') Then ' Obesità II ' Else IF ( BMI >'39.9') Then ' Obesità III ' Else ' ? ' Endif Endif Endif Endif Endif Endif)
_commento_
FROM pazienti p , nos_002 n
Where p.codice=n.codice
AND BMI is not null
AND p.Decesso is null
And (n.pa_drevoca Is Null Or n.pa_drevoca > Today())
And p.pa_convenzione = 'S'
And eta Between 40 And 60
AND p.data_open BETWEEN '2011/01/01' AND '2011/12/31'
Order By 1, 2, 4

La query è molto utile, e ringrazio anch'io.
Si può fare in modo che mostri alla fine dell'elenco anche i pazienti a cui non è stato fatto il bmi?

Basta cancellare il rigo: AND BMI is not null - invece cambiandolo in: AND BMI is null si elencano i pzienti a cui non è stato mai eseguito un BMI, e poi volendo si può variare il range di età da 40 a 60 anni cambiando il rigo: And eta Between 40 And 60 - ed il periodo di osservazione cambiando: AND p.data_open BETWEEN '2011/01/01' AND '2011/12/31'

Scusa Giuseppe e se volessimo fare la stessa cosa con le viste, cioè estrarre i pazienti a cui è stato calcolato il BMI insieme a quelli a cui non è stato calcolato il BMI utilizzando questa tua query che hai postato tempo fa?

SELECT distinct cognome, nome,datavisita, accertamento, risults
FROM v_accertamenti
WHERE accertamento Like 'BMI%'
and ((today()-datanasc)/365) between '40' and '60'
ORDER By cognome, nome,datavisita



Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Admin il Lun 28 Nov 2011 - 1:25

Lucio Mignone ha scritto:

...........
Scusa Giuseppe e se volessimo fare la stessa cosa con le viste, cioè estrarre i pazienti a cui è stato calcolato il BMI insieme a quelli a cui non è stato calcolato il BMI utilizzando questa tua query che hai postato tempo fa?

SELECT distinct cognome, nome,datavisita, accertamento, risults
FROM v_accertamenti
WHERE accertamento Like 'BMI%'
and ((today()-datanasc)/365) between '40' and '60'
ORDER By cognome, nome,datavisita



Con le viste è diverso perché escludono i pazienti senza alcun BMI. Allora si dovrebbe fare una doppia estrazione del tipo (un po' contorta ma rende l'idea):

SELECT a.cognome, a.nome,a.datanasc, Floor( Days(a.datanasc, Today())/365.25) eta, a.datavisita, a.accertamento, a.risults
FROM v_accertamenti a
WHERE a.accertamento Like 'BMI%'
and eta between '40' and '60'
UNION
Select p.cognome, p.nome, p.datanasc, Floor( Days(a.datanasc, Today())/365.25) eta, CAST('' as date), 'BMI mai eseguito', '00'
From V_pazienti p, V_accertamenti a
WHERE a.codice=p.codice
AND p.codice NOT IN (select a.codice FROM v_accertamenti a WHERE a.accertamento like 'BMI%' )
and eta between '40' and '60'
ORDER BY 6,1,2


Ultima modifica di Admin il Mar 29 Nov 2011 - 1:38, modificato 1 volta

_________________
L'Amministratore
Giuseppe Blasio
Admin
Admin
Admin
Admin

Messaggi : 525
Punti : 3605
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: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Lucio Mignone il Mar 29 Nov 2011 - 1:17

Studiando tutte le vostre query, tagliando, cucendo e riadattando, ho partorito questa.
Mostra elenco pz con BMI calcolato (la rilevazione più recente), sesso del pz, data della rilevazione BMI, formula automaticamente una valutazione dello stato della massa corporea, ordina l'elenco in base a valore crescente di BMI.
Ok niente di nuovo, ma solo a a scopo didattico che ne pensate? Notate errori grossolani?
Almeno adesso capisco quello che scrivo...

SELECT number (*) As N, cognome, nome, datavisita, datanasc, Years(datanasc, datavisita) As eta, sesso As __sesso__, ' ', accertamento As Tipo_di_Rilevazione, Cast(risults As Dec(4,1)) As Valore_BMI,

(IF ( Valore_BMI< '18.5') Then ' SottoPeso ' Else IF ( Valore_BMI Between '18.5' And '24.9') Then ' NormoPeso ' Else IF (Valore_BMI Between '25' And '29.9') Then ' Sovrappeso ' Else IF (Valore_BMI Between '30' And '34.9') Then ' Obesità 1a classe ' Else IF (Valore_BMI Between '35' And '39.9') Then ' Obesità 2a classe ' Else IF ( Valore_BMI >'39.9') Then ' Obesità 3a classe' Else ' ? ' Endif Endif Endif Endif Endif Endif) As ___Valutazione___

FROM v_accertamenti a
Where accertamento Like '%BMI%' And Not Exists
(Select a1.codice FROM v_Accertamenti a1 Where a1.codice = a.codice And a1.accertamento Like '%BMI%' And a1.datavisita > a.datavisita)
And eta Between 40 And 60

Group By risults, cognome, nome, datanasc, eta, sesso, datavisita, accertamento
Order By 1, 2, 3


PS Per Giuseppe, mi è risultato complicato, tanto da rinunciarci, tentare di aggiungere in questa query (con UNION come da te suggerito) anche i pazienti che NON hanno il BMI calcolato.
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3741
Voti per importanza dei messaggi : 34
Data d'iscrizione : 20.02.11
Età : 55
Località : CAVRIGLIA (AR)

Visualizza il profilo http://comeva.altervista.org/

Torna in alto Andare in basso

Re: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Admin il Mar 29 Nov 2011 - 2:59

Bene, bravo la query è lineare e funziona.

Per inserire i pazienti senza BMI puoi fare:

SELECT cognome, nome, datavisita, a.datanasc, Years(a.datanasc, datavisita) As eta, sesso As __sesso__, accertamento As Tipo_di_Rilevazione, Cast(risults As Dec(4,1)) As Valore_BMI,

(IF ( Valore_BMI< '18.5') Then ' SottoPeso ' Else IF ( Valore_BMI Between '18.5' And '24.9') Then ' NormoPeso ' Else IF (Valore_BMI Between '25' And '29.9') Then ' Sovrappeso ' Else IF (Valore_BMI Between '30' And '34.9') Then ' Obesità 1a classe ' Else IF (Valore_BMI Between '35' And '39.9') Then ' Obesità 2a classe ' Else IF ( Valore_BMI >'39.9') Then ' Obesità 3a classe' Else ' ? ' Endif Endif Endif Endif Endif Endif) As ___Valutazione___

FROM v_accertamenti a
Where accertamento Like '%BMI%' And Not Exists
(Select a1.codice FROM v_Accertamenti a1 Where a1.codice = a.codice And a1.accertamento Like '%BMI%' And a1.datavisita > a.datavisita)
And eta Between 40 And 60
Group By risults, cognome, nome, datanasc, eta, sesso, datavisita, accertamento


UNION
Select distinct p.cognome, p.nome, CAST('' as date), p.datanasc, Years(p.datanasc, today()) As eta, p.sesso, 'BMI non eseguito', CAST('' as dec (4,1)), 'NN'
From V_pazienti p, V_accertamenti a
WHERE a.codice=p.codice
AND p.codice NOT IN (select a.codice FROM v_accertamenti a WHERE a.accertamento like 'BMI%' )
and eta between '40' and '60'
Order By 7,1,2


Usare la numerazione con la funzione UNION diventa problematico per cui ho preferito eliminarla.

Quando si usa UNION è indispensabile che tutte le estrazioni abbiano colonne equivalenti come numero e tipo.

_________________
L'Amministratore
Giuseppe Blasio
Admin
Admin
Admin
Admin

Messaggi : 525
Punti : 3605
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: SELECT DISTINCT... AIUTO! - evoluta poi in ESTRAZIONE BMI e RCV

Messaggio  Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Pagina 1 di 2 1, 2  Seguente

Torna in alto


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