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

(Today()-datanasc)/365

Andare in basso

(Today()-datanasc)/365

Messaggio  Lucio Mignone il Sab 26 Nov 2011 - 23:29

Cari Maestri,

(Today()-datanasc)/365
sappiamo che calcola l'età del paziente.

Ma supponiamo di voler calcolare l'età del paziente nel momento in cui abbiamo effettuato un dato accertamento?
Per esempio, volendo sapere l'età del paziente al momento della rilevazione del BMI, pensavo che potesse funzionare

(datavisita-datanasc)/365 che però non calcola l'età correttamente e non riesco a capire perché...
per me, che sono nato il 13/12/63, fino al 30 novembre assegna 47 anni, già il primo dicembre mi fa più vecchio di uno assegnandomene 48 Crying or Very sad

Pensavo potesse funzionare anche

(Max(datavisita)-datanasc)/365 ma questa non va proprio.
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3744
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: (Today()-datanasc)/365

Messaggio  Giuseppe il Dom 27 Nov 2011 - 0:32

Ci sono vari modi per calcolare l'età:

Days(today()-datanasc)/365 oppure Days(datanasc, today())/365

Entrambe le formule calcolano il numero di giorni tra le due date e dividono il totale per 365, ma poiché l'anno non è di 365 giorni ma 365,25 ecco la differenza, quindi dovrebbe essere: Days(datanasc, today())/365.25 ma si otterrebbe un'età con i decimali e quindi bisognerebbe arrotondare per difetto, cioé: FLOOR(Days(datanasc, today())/365.25). Ciò complica le cose.

Io preferisco usare la formula: Years(datanasc, today()) che è più semplice e più precisa.

E' possibile calcolare la differenza tra due date quando sono dei valori univoci, Max(datavisita) non è un valore univoco. Con MAX(campo) si indica il valore massimo tra un insieme di valori omogenei, ma datavisita a quale data si riferisce? l'ultimo accesso alla scheda del paziente. la data più recente di prescrizione di un dato accertamento o di misurazione di pressione, ecc. ? In un post precedente già si è discusso di questo, per indicare un valore più recente non è sufficiente indicare Max(datavisita), ma bisogna calcolare la data corrispondemte all'ultimo valore inserito quando si esclude un valore analgo inseito in data successiva.

Ricorderai la selezione per indicare la data dell'ultimo BMI:

(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 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)) _Data_BMI_,
Giuseppe
Giuseppe
Moderatore
Moderatore

Messaggi : 90
Punti : 3075
Voti per importanza dei messaggi : 22
Data d'iscrizione : 20.02.11
Età : 62
Località : CASERTA

Visualizza il profilo

Torna in alto Andare in basso

Re: (Today()-datanasc)/365

Messaggio  Cervino il Dom 27 Nov 2011 - 12:38

In effetti puo' esistere una marginale discrepanza fra le varie formule utilizzate per calcolare l' età, in quanto la durata dell' anno astronomico considerato ( quale : siderale , tropicale, gaussiano , lunare , ... , ) è approssimata in modo lievemente diverso .

Ad esempio per calcolare l' età dei pazienti , è possibile usare :

Cast( DateDiff ( dd, nascita , Today())/365.25 As Integer) As eta,

oppure in alternativa

(DateDiff ( hh, nascita , Today())/8766) As eta,

Ad esempio per calcolare l' età dei pazienti Vaccinabili per l' Influenza , utilizzo :

Cast( Days(p.nascita, '2011/12/31')/365.25 As Integer)

oppure

DateDiff ( hh, p.nascita, '2011/12/31') /8766

ed in modo analogo per estrarre il BMI :

Select Cast(cognome As Char(18)), nome, sesso, nascita,
Cast( DateDiff ( dd, nascita , Today())/365.25 As Integer) 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+61 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_d_,
(DateDiff ( hh, nascita , _Bmi_d_)/8766) _eta_Bmi_,
(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 eta >19.9 And _Bmi_v_ > 14.9
And n.pa_medi Like '%' 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

Varie sono le opzioni possibili con la formula DATEDIFF : giorni , ore , minuti , secondi , ... .

Un saluto da Sergio Tomasini , Orzivecchi ( BS )

Cervino
Membro Junior
Membro Junior

Messaggi : 235
Punti : 3200
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: (Today()-datanasc)/365

Messaggio  Lucio Mignone il Dom 27 Nov 2011 - 18:18

Carissimi,
Un grazie come sempre per l'aiuto.

A beneficio di tutti la seguente formula
Years(datanasc, datavisita) As eta_allla_rilevazione
funziona perfettamente per calcolare l'età del paziente al momento della rilevazione del dato, nel mio caso BMI.
Sto provando a riscrivere la query che è una SUMMA di tutti i vostri preziosi suggerimenti ed una volta terminata la pubblico per sottoporla al vostro giudizio che mi interessa molto.
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3744
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: (Today()-datanasc)/365

Messaggio  Cervino il Lun 28 Nov 2011 - 1:39

Sul mio mille.db di riserva , rilevo che le formule meno attendibili per il calcolo dell' età sono :

(Years(nascita, Today())) ed in misura molto minore (Days(nascita, Today())/365)


mentre risultano parimenti affidabili ( almeno per un' età fino a 100 anni ) le formule :

(Floor( Days(nascita, Today())/365.25))

(DateDiff ( hh, nascita, Today())/8766)

Cast( DateDiff ( dd, nascita, Today())/365.25 As Integer)

Floor( DateDiff ( dd, nascita, Today())/365.25)


Sarà forse diverso il risultato, estraendo dalle viste ?
Domani verifichero' in studio, su un altro mille.db, se il comportamento delle formule è analogo
.

Una saluto da Sergio Tomasini , Orzivecchi (BS)

Cervino
Membro Junior
Membro Junior

Messaggi : 235
Punti : 3200
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: (Today()-datanasc)/365

Messaggio  Lucio Mignone il Lun 28 Nov 2011 - 8:27

Cervino ha scritto:Sul mio mille.db di riserva , rilevo che le formule meno attendibili per il calcolo dell' età sono :

(Years(nascita, Today())) ed in misura molto minore (Days(nascita, Today())/365)


mentre risultano parimenti affidabili ( almeno per un' età fino a 100 anni ) le formule :

(Floor( Days(nascita, Today())/365.25))

(DateDiff ( hh, nascita, Today())/8766)

Cast( DateDiff ( dd, nascita, Today())/365.25 As Integer)

Floor( DateDiff ( dd, nascita, Today())/365.25)


Sarà forse diverso il risultato, estraendo dalle viste ?
Domani verifichero' in studio, su un altro mille.db, se il comportamento delle formule è analogo
.

Una saluto da Sergio Tomasini , Orzivecchi (BS)

Riprovo meglio e poi ti faccio sapere, sto usando le viste, al momento mi sembra più semplice per imparare ma mi sto rendendo conto dei limiti (vedi post sul BMI le mie difficoltà per elencare al tempo stesso a chi è stato calcolato ed a chi non è stato calcolato il BMI), ho provato con due tre date la formula per calcolare l'età al momento della rilevazione

(Years(nascita, datatvisita)

e mi sembrava dare un risultato corretto.
Lucio Mignone
Lucio Mignone
Membro Senior
Membro Senior

Messaggi : 626
Punti : 3744
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: (Today()-datanasc)/365

Messaggio  Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto


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