Newsgroup: it.comp.appl.access
Titolo: media mobile

Ho il seguente problema: dovrei calcolare la media mobile di un valore,per 
un programma finanziario.
Chi mi puň aiutare?
Grazie,
data                   nome                    valore 
media mobile
1/12/2003            a                            2
2/12/2003            a                            4
3/12/2003            a                            3 
3
4/12/2003            a                            5 
4
5/12/2003            a                            4 
4
1/12/2003            b                            10
2/12/2003            b                            20
3/12/2003            b                            60 
30
4/12/2003            b                            10 
30
5/12/2003            b                            50 
40 

 5/12/2003            b                            50 40
La media mobile è definita con riferimento al numero di elementi da
prendere in considerazione: gli ultimi tre, gli ultimi 10, etc.
Tu vuoi la media di tutti, cioè la media progressiva?
Nel campo valore hai le modalità; e le frequenze son tutte unitarie?
Sottinteso media aritmetica, suppongo.
Bruno

 ha scritto nel messaggio
news:45858797$0$16143$4faf...@reader3.news.tin.it...

Dall' esempio postato sembra di capire che vuoi una "media mobile semplice"
(SMA) calcolata su 3 periodi.
Se č cosě te la cavi con un paio di query, prima di postarle dovrei sapere
se un "Nome" ha un solo "Valore" per ogni singola "Data", in caso contrario
manca un campo che identifica in modo univoco ogni singola riga della
tabella.
Fammi sapere :-)
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

 Ciao
Ok, poniamo che la tabella si chiami tblValori e che i campi abbiano lo
stesso nome da te indicato.
Crea una prima query avente questo codice
----
SELECT V1.Data, V1.Nome, V1.Valore, COUNT(*) AS Nr
FROM tblValori AS V1
     INNER JOIN tblValori AS V2
     ON (V1.Nome=V2.Nome) AND (V1.Data>=V2.Data)
GROUP BY V1.Data, V1.Nome, V1.Valore;
----
e la salvi con nome qryValori, questa query serve a numerare
progressivamente ogni gruppo di nomi. e rende questo risultato
----
 data                   nome      valore  Nr
 1/12/2003            a             2      1
 2/12/2003            a             4      2
 3/12/2003            a             3      3
 4/12/2003            a             5      4
 5/12/2003            a             4      5
 1/12/2003            b            10     1
 2/12/2003            b            20     2
 3/12/2003            b            60     3
 4/12/2003            b            10     4
 5/12/2003            b            50     5
----
Adesso crea la query finale che attinge i dati dalla query creata in
precedenza
----
SELECT V1.Data, V1.Nome, V1.Valore,
       AVG(IIf(V2.Nr>=V1.Nr-2  AND V2.Nr<=V1.Nr,V2.Valore,NULL))*
       IIF(V1.Nr>=3,1,NULL) AS MediaMobile
FROM qryValori AS V1
     INNER JOIN qryValori AS V2
     ON V1.Nome=V2.Nome
GROUP BY V1.Data, V1.Nome, V1.Valore, V1.Nr
ORDER BY V1.Nome, V1.Data;
----
Questa query rende la media mobile semplice su 3 periodi
Come puoi vedere dalla condizione della prima IIF
----
V2.Nr>=V1.Nr-2  AND V2.Nr<=V1
----
sfrutto il numero progressivo per prendere in esame solo il valore corrente
e i due precedenti  per fare la media.
La seconda IIF serve solo per non mostrare la media sulle righe che non
hanno almeno due record precedenti.
