Newsgroup: it.comp.appl.access
Titolo: Cercare il valore piu' vicino a quello dato

ho una tabella di questo tipo
ID   IDAnag  DataVis
1    2       08/01/2001
2    1       08/02/2001
3    2       08/03/2001
4    2       08/04/2001
dati un IDAnag e una DataVis, ho bisogno di conoscere l'ID del record
precedente in ordine di data,
cioe' dati:
IDAnag = 2
DataVis = 08/04/2001
devo ottenere ID=3
oppure 
IDAnag = 2
DataVis = 08/03/2001
devo ottenere ID=1
vorrei evitare di scrivere una funzioncina, quindi sto provando con una
query e l'uso di First/Last, ma con scarsissimi risultati.
Qualche idea?
TIA
-- 
Federico
----------------------------------
Rimuovi paperino. per e-mail
----------------------------------
Tutte le richieste che arrivano
in privato, vengono cestinate.
----------------------------------
Sito Comune di it.comp.appl.access
http://www.sitocomune.com
mailto:
webm...@sitocomune.com
----------------------------------

 ha scritto nel messaggio
news:3B700377...@sitocomune.com...

Fai una query  imposti la proprietą Primi Valori a 1, applichi un
ordinamento decrescente  su data vis, imposti i dovuti criteri su ID Anag e
su DataVis e la riga che ottieni č il risultato che cerchi.
I criteri sono IDAnag = all'IDAnag che cerchi
DataVis < della data che ti interessa.
Ciao fammi sapere Roberto

 Ciao fammi sapere Roberto
grazie, quello che dici funziona sicuramente, ma mi stavo perdendo in un
bicchiere d'acqua :-)
a me quel valore serve visualizzarlo in un controllo ed essendo ID un
campo contatore progressivo, ho risolto molto semplicemente con una
dmax:
=dmax("[ID]","Tabella1","[IDAnag]=2 AND [DataVis]<#08/04/2001#")
scusami e grazie per l'interessamento



Ciao Federico.
Se la tabella si chiama Tabella1, la seguente query
SELECT Tabella1.ID, Tabella1.IDAnag, Tabella1.DataVis,
IIf(IsNull(DLookUp("ID","Tabella1","IDAnag =" & [IDAnag] & " And DataVis<#"
& Format([DataVis],"mm/dd/yyyy") &
"#")),[ID],DLookUp("[ID]","Tabella1","DataVis=#" &
Format(DMax("DataVis","Tabella1","IDAnag=" & [IDAnag] & " And DataVis<#" &
Format([DataVis],"mm/dd/yyyy") & "#"),"mm/dd/yyyy") & "#")) AS IDCercato
FROM Tabella1;
dovrebbe restituirti nel campo calcolato IDCercato l'ID del record della
visita precedente fatta allo stesso IDAnag; se NON esiste una visita
precedente, ti restituisce nel campo IDCercato l'ID corrente.
Ho provato con l'esempio da te postato e mi restiruisce i valori da te
voluti.
Ciao Roberto

 ha scritto nel messaggio

non e' proprio quello che cercavo (vedi riposta a Roberto), ma adesso
che l'ho vista mi e' venuta in mente un altra situazione in cui mi e'
molto utile la query che mi hai inviato ;-))
Grazie



Ho letto la risposta che hai dato a Roberto; nulla da ecceppire, se è sempre
vero che le visite con data maggiore hanno un ID maggiore.
Ma se ciò non fosse sempre vero (non sempre registrassi nella tabella le
visite nell'ordine in cui avvengono) e tu avessi una tabella contenente
questi dati:
ID        IDAnag    DataVis
1            2            07/04/2001
2            1            08/02/2001
3            2            08/03/2001
4            2            08/04/2001
5            2            09/03/2001
per
IDAnag = 2
DataVis = 08/04/2001
penso che con il tuo sistema ti restituirebbe 5 anziché 1, così come ti
restituirebbe giustamente 5 per
IDAnag = 2
DataVis = 07/04/2001
Forse sto prendendo una cantonata. ;-)
Però....
Ariciao, Roberto

 Ariciao, Roberto
no anzi, hai perfettamente ragione, pero' il caso di registrazione a
posteriori e' un caso che non si dovrebbe verificare in quanto dovrebbe
avvenire il tempo reale (cioe' durante la visita).
pero' conoscendo i medici, forse e' il caso che io lo prenda in
considerazione...
mo ce penso ;-))



=dmax("[ID]","Tabella1","[IDAnag]=2 AND [DataVis]<=#08/04/2001#")
--
Silvio
il sito comune di it.comp.appl.access:
http://www.sitocomune.com