Newsgroup: it.comp.appl.access
Titolo: Differenza tra un campo e il precedente?

Salve a tutti,
ho una tabella dove ogni giorno registro una serie di letture sempre
crescenti.
id Data    Lettura
1  1/1/01      152
2  2/1/01      254
3  3/1/01      652
.   .               .
.   .               .
Pensavo di fare una query per calcolare ogni giorno la differenza di lettura
con il giorno precedente:
id Data    Lettura Differenza
1  1/1/01      152                0
2  2/1/01      254            102
3  3/1/01      656            302
.   .               .                     .
.   .               .                     .
Il fatto e' che mi sono incasinato tantissimo senza arrivarea nessun
risultato.
Come posso fare? Forse posso calcolarla solo con una maschera o in un
report, e come?
Grazie in anticipo a chiunque sappia darmi una dritta.
Iacopo

 ha scritto nel messaggio
news:9kbio6$ef5$1...@fe2.cs.interbusiness.it...

Ti servono 2 query.
1. Fai una query dove metti Expr1: ID - 1
in modo da avere una tabella virtuale con l'ID scalato di uno
2. Fai una seconda query dove metti la query precedente e la tabella e fai
un join tra Expr1 e ID, quindi fai un campo con la differenza tra le due
letture, quella che proviene dalla query e quella della tabella.
Ciao, Arturo

Ciao Arturo (e prima di tutto grazie mille!),
il tuo suggerimento funzionerebbe se avessi "id" senza salti (da 2 a 4 per
es.) o "Data" con tutti i giorni registrati senza salti (dal 1/1/01 al
5/1/01 al 6/2/01...) infatti la mia tabella e' ordinata per data crescente e
in generale e':
id Data    Lettura
1  1/1/01      152
9  4/1/01      254
7  3/2/01      652
.   .               .
.   .               .
Il fatto e' che devo legarmi alla data precedente per fare la differenza.
Come potrei fare a creare una specie di tabella virtuale come mi hai
suggerito, ma legata alla data precedente?
Grazie
Iacopo

 ha scritto nel messaggio
news:9kbksi$h0r$1...@fe2.cs.interbusiness.it...

E' semplice metti due volte la stessa tabella nella query e colleghi il
campo data.
Ciao

 campo data.
Non tener  conto del precedente :-)
Se le date non hanno una distanza regolare e se l'ID non č progressivo, a
questo punto non resta che fare qualche riga in VBA. Sei un po' pratico di
visual basic?
Ciao, Arturo


Purtroppo non sono pratico di VBA anche se conoscendo un po' di C potrei
cavarmela se puoi darmi qualche indicazione per la sintassi.
Iak

 Iak
Ho provato questo codice e con me funziona. Devi avere la libreria Microsoft
DAO 3.6 nei riferimenti dei moduli, se non sai di cosa sto parlando ti
spiego poi in dettaglio.
L'unica cosa che devi cambiare in questo script č il nome della tabella
nella terza riga, al posto di Tabella1 metti il nome della tua tabella. I
nomi dei campi dovrebbero essere giusti, io ho messo "data", "lettura" e
"differenza", altrimenti li devi cambiare con i tuoi. Il resto non va
cambiato.
Crei un pulsante nuovo sulla maschera (senza conposizione automatica) e poi
con il pulsante destro ci clicchi sopra e apri "genera evento", scegli
"genera codice" e tra le due righe che trovi ci incolli queste.
Dim rst1 As Recordset, successivo, precedente
Set rst1 = CurrentDb.OpenRecordset("select * from " _
& "[tabella1] order by data", dbOpenDynaset)
With rst1
.MoveFirst
Do Until .EOF
precedente = !lettura
.MoveNext
If Not .EOF Then
successivo = !lettura
.edit
!differenza = successivo - precedente
.Update
End If
Loop
End With
rst1.Close
Ciao
Arturo

Scusami Arturo,
so di avere abusato della tua pazienza fin troppo, ma...Come faccio a vedere
se ho installato il DAO 3.6?
In ogni caso ho un poaio di domande da farti:
Quando parli di Maschera va bene se creo una maschera con l'autocomposizione
sulla mia tabella?
Oppure creo una maschera vuota dove all'interno inserisco una sottomaschera
in visualizzazione foglio dati della mia tabella?
nella mia tabella non ho il campo "differenza", lo devo creare oppure basta
che crei un campo virtuale nella sottomaschera?
Grazie ancora
 Iak

  Iak
Di niente, sono in ferie e sto leggendo un libro, se non rispondo un po' qui
mi addormento...
Ciao
Arturo

Funzionaaa!!!
Grazie Mille!!!
Iak

 ha scritto nel messaggio
news:9kbio6$ef5$1...@fe2.cs.interbusiness.it...

Se il risultato finale è
id Data    Lettura Differenza
1  1/1/01      152            152
2  2/1/01      254            102
3  3/1/01      652            398
Se la tabella che contiene i dati si chiama Tabella1.
Se vuoi realizzarlo con una query.
Il codice SQL della query é
SELECT Tabella1.Id, Tabella1.Data, Tabella1.Lettura,
IIf([Data]=DMin("Data","TAbella1"),[Lettura],[Lettura]-DLookUp("[Lettura]","
Tabella1","Data =#" & Format(DMax("[Data]","Tabella1","Data <#" &
Format([Data],"mm/dd/yyyy") & "#"),"mm/dd/yyyy") & "#")) AS Differenza
FROM Tabella1;
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------