Newsgroup: it.comp.appl.access
Titolo: Query sulle date

Salve, uno dei campi di un db č la data, nel formato GG/MM/AAAA, come
posso visualizzare tutti i record che hanno come data una compresa nei 6
mesi precedenti rispetto il mese attuale?
grazie
Andrea
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio 
news:er74pn$6g8$1...@news.newsland.it...

Il campo del db, se č di tipo data, non ha quel formato indicato da te. 
Quello č solo un formato di visualizzazione: lo stesso campo lo puoi 
visualizzare mettendo prima l'anno, oppure mostrare solo il giorno e cosě 
via. Il campo sottostante ha sempre lo stesso formato col solito valore: 
ovvero un numero progressivo a partire dall'inizio del 1900 (o quasi).
Per poter esaminare solo i records che dici tu, potresti creare una query 
che lascia passara solo le date successive alla data tua meno 183, se il 
controllo dei 6 mesi non deve essere proprio rigido. Nel caso, invece, che 
ti serva un controllo rigoroso dei sei mesi precedenti, potresti creare un 
function che controlli che il giorno della data calcolata con la precedente 
istruzione sia uguale al giorno della data di partenza. Ma non saprei come 
si deve comportare se la data di partenza fosse 30 agosto oppure 31 ottobre: 
di sicuro non potresti ottenere le date 30 febbraio e 31 aprile.
Ciao
Antonio

 Andrea
Creati un campo Calcolato nella Query nel quale venga restituito il
risultato della
distanza in Mesi dalla data odierna a quella del Record, quindi nei
suoi criteri metti
<=6
CampoDistanza:DateDiff("m";Date();[CampoData])
Criterio:   <=6
Ciao
@Alex

 Antonio
Quello che dici inizialmente è vero, il Db salva i dati come numeri
relativi dal 1900, ma il tipo di dato cambia a seconda che debba
contenere solo la Data(sarà un Long) oppure anche hh:mm:ss allora sarà
un Double.
Questa è filosofia, ma non influenza il fatto che la Data sia una data
ed il campo può tranquillamente essere trattato come tale, quindi gli
si possono applicare funzioni, filtri e tutto quanto riguarda una Data
in visualizzazione esplicita, ci penserà poi JET a farsi tutti i suoi
conti.
Se qualcosa non torna è solo perchè quando si passa un parametro di
tipo Data non interpretato da JET non viene effettuata la conversione
al riferimento Anglosassone, quindi si otterrebbe l'inversione mm/gg
ma questo non accade se si formatta la Data in formato ISO.
Dico questo perchè è assurdo pensare di dover fare il ragionamento che
hai suggerito semplicemente per avere un filtro Data con distanza
6mesi.
@Alex

 @Alex
Perfetto,compreso il tutto ma ho ancora un problemino, ivvero il db ha una
sezione anagrafica ed una di dati, la data  fa parte della tbl dati,
quindi per ogni id dell'anagrafica ho 1 o più date e la differenza con il
mese corrente dovrebbe essere fatta con la data più recente.
Aggirando l'ostacolo potrei aggiungere nella tbl anagrafica un campo data
che sarà uguale alla data più recente della tbl dati per poi utilizzarlo
per il confronto, ma credo che non sia la cosa migliore da fare.
Giusto?



La cosa da chiarire è il motivo per il quale hai più CampiData nella
stessa tabella.
Questo può essere fatto solo se i campi Data hanno funzioni
differenti, ma se la loro funzione è la medesima(come mi pare nel tuo
caso visto che la scelta nell'uso del campo dipende solo dal Tempo di
effettuazione) direi che c'è qualche cose di non corretto nella
normalizzazione.
Questo di complicherà le cose sempre, fossi in te cercherei di
pensarci prima....
Saluti
@Alex

 @Alex
Ogni record in anagrafica ha più record nella tbl dati, e quindi più date,
dovrei evidenziare prima di tutto per ogni id di anag il record che ha
come data quella più vicina all'attuale.
Almeno credo


 ha scritto nel messaggio 
news:1171742580.9...@v45g2000cwv.googlegroups.com...





@Alex
A livello di tabella, che io sappia, la data occupa sempre 8 byte. Il fatto 
che la puoi anche gestire con un campo di tipo long significa che accetti di 
non trattare la parte spicciola della data, ovvero hh:mm:ss. In questo caso, 
ovviamente, se salvi il record sul quale hai gestito la data col campo di 
tipo long, allora nella parte hh:mm:ss dovresti avere 0:0:0.
Altra cosa: perchè consideri assurda la possibilità di fare "data - 183" ? 
Non è una cosa semplice semplice e ti dà le date da 6 mesi fa fino ad oggi ?
Altra cosa: Su alcuni messaggi sui quali vado a rispondere (come in questo 
caso) non viene apposto il simbolo ">" che permette di seguire la 
prosecuzione dei vari messaggi. E' colpa del mio Outlook-Express o del tuo 
programma col quale gestisci il newsgroup ? Sarei portato a pensare che è 
colpa di qualche parametro male impostato sul mio outlook, ma d'altra parte 
questo inconveniente l'ho riscontrato una volta sì e 10 no...
Ciao
Antonio

 questo inconveniente l'ho riscontrato una volta sì e 10 no...
Io uso GOOGLE_GROUP e non un NewsReader, quindi sarà colpa di
Google...
@Alex