Newsgroup: it.comp.appl.access
Titolo: Query con calcolo differenze tra date legate ad un campo specifico

Buongiorno a tutti,
Sono un neofita in Access, e quello che in Excell mi riusciva
facilmente, non mi riesce in Access. Access pero' permette di lavorare
con molti più records quindi lo sto studiando.
Ho bisogno di creare una query che utilizzando i valori di una tabella
tipo la seguente, mi calcoli per ogni record quanti giorni mancano
alla prima chiusura:
Tabella:
GiornoChiusura   Data                 ora
                         11/01/2009        1700
                         12/01/2009        0900
                         12/01/2009        1200
                         12/01/2009        1700
                         13/01/2009        0900
                         13/01/2009        1200
                         13/01/2009        1700
                         14/01/2009        0900
SI                      14/01/2009        1200
                         14/01/2009        1700
                         15/01/2009        0900
                         15/01/2009        1200
                         15/01/2009        1700
                         16/01/2009        0900
SI                      16/01/2009        1200
                         16/01/2009        1700
Query desiderata:
GiornoChiusura   Data                 ora      GiorniMancantichiusura
                         11/01/2009        1700    3
                         12/01/2009        0900    2
                         12/01/2009        1200    2
                         12/01/2009        1700    2
                         13/01/2009        0900    1
                         13/01/2009        1200    1
                         13/01/2009        1700    1
                         14/01/2009        0900    0
SI                      14/01/2009        1200    0
                         14/01/2009        1700    2
                         15/01/2009        0900    1
                         15/01/2009        1200    1
                         15/01/2009        1700    1
                         16/01/2009        0900    0
SI                      16/01/2009        1200    0
                         16/01/2009        1700    eccetera ..........
Chi mi puo' aiutare?
Vi ringrazio in anticipo
Renzo

 ...

Se GiornoChiusura ha il tipo Si/No l'espressione per il campo calcolato
sarebbe:
DLookUp("Data";"Tabella";"GiornoChiusura=True And Data>=" & 
CLng([Data]))-[Data]
se invece GiornoChiusura è un campo testo:
DLookUp("Data";"Tabella";"GiornoChiusura='SI' And Data>=" & 
CLng([Data]))-[Data]
-- 
HTH
Karl
*********
Access FAQ: 
www.donkarl.com/it
 

 ha scritto nel messaggio 
news:73hh7iF...@mid.individual.net...

Io utilizzerei la funzione datediff...Prova a dare uno sguardo qua:
http://www.techonthenet.com/access/functions/date/datediff.php
A presto

 ...
Io no. Come una data in JET/ACE all'interno è del tipo Double
preferisco un semplice calcolo aritmetico.
-- 
cu



Ciao Karl,
Ho usato il tuo consiglio mettendo la formula
CampoCalcolato: DLookUp("Data";"Bund Query";"FineMese=True And Data>="
& CLng([Data]))-[Data]
ma mi ha dato errore: allora ho provato con:
CampoCalcolato: DLookUp("Data";"Bund Query";"FineMese=True And Data>="
& [Data])-[Data]
e mi ha dato lo stesso errore
Allora ho provato se almeno prendeva la data da paragonare mettendo la
seguente formula:
CampoCalcolato: DLookUp("Data";"Bund Query";"FineMese=True And Data>="
& [Data])
Finalmente mi da la data del primo "True" ma non su tutti i records
(alcui giorni rimangono vuoti)  e se metto altri "True" più avanti nel
file lui mi continua a mettere (sempre saltuariamente) la data del
primo "True"
Il mio problema è sempre lo stesso. anche in altri campi (numerici,
non date) dovro' confrontare un record con lo stesso campo del
precedente o del successivo e prendere decisioni su cosa calcolare.
grazie comunque del tuo aiuto
Renzo

 ...
La sintassi della tua ultima versione sarebbe giusta per un campo
numerico "Data". Con una data ti dovrebbe dare sempre errori. -->?
In rispetto ai salti prova con DMin() invece di DLookUp().
-- 
HTH


 - Mostra testo citato -
Ciao Karl,
a mia discolpa posso solo dire che avevo detto sin dall'inizio che ero
un  "pollo".
Dopo la tua risposta ho scoperto che:
1) Nella tabella originale che avevo importato da un .txt nel campo
Data avevo lasciato Tipo Dati ="testo". Mettendoci invece Tipo Dati
="Data/ora" la tua formula originale ha "MAGICAMENTE" iniziato a
funzionare. anche i buchi sono spariti.
2) Cliccando su #errore si apre un pop up con la spiegazione del tipo
di errore
3) In Excell so fare un po' di cose ma in Access sono molto scarso.
Grazie mille per il tuo aiuto.
Sono spudorato se ti chiedo anche un altra cosa?
Su una tabella di questo tipo:
finemese      valore     prezzo
                      34          122
true                22          122
                      27          120
                      34          121
                      41          112
                      35          123
                      44          121
                      23          115
                      40          125
                      45          123
true                34          134
                      39          132
                      23          114
                      37          100
                      45          123
                      47          130
                      35          112
                      31          125
vorrei fare una query con il seguente campo calcolato:
Su una tabella di questo tipo:
finemese      valore     prezzo         campoCalcolato
                      34          121          110
true                22          122           110
                      27          120             0
                      34          121             0
                      41          112           112
                      35          123           112
                      44          121           112
                      23          115           112
                      40          125           112
                      45          123           112
true                34          134            112
                      39          132             0
                      23          114             0
                      37          100             0
                      45          123            123
                      47          130            123
                      35          112            123
                      31          125            123   eccetera
Ovvero un campo che il giorno dopo fine mese si azzeri e si ricordi
fino alla fine del mese successivo il prezzo della prima volta che il
valore a superato 40 . Se il giorno dopo fine mese è subito superiore
a 40 può mettere direttamete il suo prezzo fino alla fine del mese
successivo.
se imparo anche questo meccanismo potrei andare molto avanti nel
lavoro.
Ciao e grazie ancora.
Renzo

 ...

Nella tua tabella manca un campo per l'ordinamento che è necessario
per l'operazione, p.e. un campo data o un id.
-- 
cu


 - Mostra testo citato -
Buongiorno Karl
non pensavo che servissero , comunque esiste
un campo ID (fatto creare direttamente da access al momento
dell'importazione dei dati dal file .txt ; ho solo cancellato il primo
record pechè mi aveva importato le intestazioni)
mentre il campo Data ha date ripetute a seconda delle ore del giorno
(quindi non so se si può utilizzare)
il campo Ora (sono riuscito ad importarlo solo come Tipo
dati :"Testo"). In teoria (visto che il fine mese finisce ad un ora
nel mezzo della giornata anche il campo calcolato sul quale mi hai
gentilmente aiutato dovrebbe finire all'ora esatta del fine mese e per
il resto della giornata ricominciare a contare i giorni  che mancano
dal Fine mese successivo) ma mi accontento che già li ricalcoli dal
giorno successivo.
:
Id        Data                  Ora      finemese      valore
prezzo         campoCalcolato
2         27/01/2000         0900                         34
121          110
3         27/01/2000         1200   true                22
122           110
4         28/01/2000         0900                         27
120             0
5         28/01/2000         1200                         34
121             0
6         02/02/2000         0900                         41
112           112
7         02/02/2000         1200                         35
123           112
8         03/02/2000         0900                         44
121           112
9         03/02/2000         1200                         23
115           112
10       20/02/2000         0900                         40
125           112
11       20/02/2000         1000                         45
123           112
12       20/02/2000         1200   true                34
134            112
13       21/02/2000         0900                         39
132             0
14       21/02/2000         1200                         23
114             0
15       22/02/2000         0900                         37
100             0
16       22/02/2000         1000                         45
123            123
17       22/02/2000         1200                         47
130            123
18       25/02/2000         0900                         35
112            123
19       25/02/2000         1200                         31
125            123   eccetera
L'ID progressivo basta?
Ciao e grazie.
Renzo

 giorno successivo.
Non sono sicuro di capire questa parte lungo nei parentesi
ma certo puoi anche includere il campo con l'ora nelle formule.

Un Id progressivo e univoco è perfetto. Prova con:
CampoCalcolato: nz(DLookUp("Prezzo";"Tabella";"Valore>40 And Id<=" & [Id] & 
" And Id>=" & DMax("Id";"Tabella";"Id<" & [Id] & " And FineMese=True"));0)
-- 
HTH


 - Mostra testo citato -
Karl non ho parole, bravissimo e gentilissimo.
Funziona!!
da lunedi posso andare avanti con il mio lavoro, scimmiettero'  le tue
formule per creare dei campi simili.
Per quanto riguarda le formule che trattano un record per volta non
dovrei avere problemi
Spero di non trovare altri inceppi.
Non voglio abusare oltre della tua pazienza, però se succederà magari
mi puoi contattare tramite e-mail e possiamo trovare il modo di non
sfruttare sempre i tuoi consigli a UFO come diciamo noi in Toscana.
Magari ti mando 2 bottiglie d'olio!!! :-)
Grazie ancora.
Renzo