Newsgroup: it.comp.appl.access
Titolo: Trovare valore valido in base a data

Buongiorno a tutti,
Ho il seguente problema su cui sto impazzendo da un paio di giorni e proprio non riesco a venirne a capo. Ho una tabella che non posso modificare strutturata grosso modo così:
 
CODICELISTINO   DATAINIZIO    DATAFINE
123             01/01/2014    31/12/2020
425             01/08/2014    31/08/2014
729             01/12/2014    31/12/2014
212             15/01/2015    28/02/2015
316             01/01/2015    31/12/2015
 
Ora in base alla data odierna io dovrei andarmi a prendere il codice listino valido (in questo caso è il 212). Naturalmente non è detto che il codice listino valido sia quello con il numero maggiore.
 
Ho provato con la funziona max sia sulla data inizio che sulla data fine ma ovviamente non funziona.
 
Idee?
 
Grazie
Andrea
 
 
 
 

Aggiungo esempio con tabella più esemplificativa:
 
prg_listino	dat_inizio_listino	dat_fine_listino
1	01/01/1800	31/12/3000 23:59:59
126	16/09/2013	30/09/2013 23:59:59
135	08/10/2013	31/12/2013 23:59:59
165	07/01/2014	30/04/2014 23:59:59
193	01/04/2014	31/12/3000 23:59:59
197	05/04/2014	30/04/2014 23:59:59
209	17/05/2014	31/08/2014 23:59:59
233	27/09/2014	31/10/2014 23:59:59
 
Il listino da estrarre è il 193

Salve,
 
Slumpolo ha scritto:

Da estrarre dove?
Se parli di una query prova con due criteri.
 
criterio nella colonna dat_inizio_listino: <=Date()
e
criterio nella colonna dat_fine_listino: >=Date()
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
Access Lobby: 
http://www.AccessDevelopers.org
 

Mi sono espresso male intendevo visualizzare.
Mettendo i criteri da te suggeriti mi escono fuori due record:
 
1	01/01/1800	31/12/3000 23:59:59
193	01/04/2014	31/12/3000 23:59:59
 
Mentre quello valido è però solo uno (il 193).
 
Grazie per la risposta.


 Mentre quello valido è però solo uno (il 193).
 
Cosa qualifica (solo) questo record come valido?
Il suo numero superiore nel prg_listino o che non include la data 
01/01/1800?
 
Nel secondo caso sarebbe semplice eliminare il record non desiderato con 
un criterio nel dat_inizio_listino: <=Date() And >#01/01/1800#


Vedo di spiegarmi meglio:
 
prg_listino        dat_inizio_listino        dat_fine_listino 
1        01/01/1800        31/12/3000 23:59:59 
126        16/09/2013        30/09/2013 23:59:59 
135        08/10/2013        31/12/2013 23:59:59 
165        07/01/2014        30/04/2014 23:59:59 
193        01/04/2014        31/12/3000 23:59:59 
197        05/04/2014        30/04/2014 23:59:59 
209        17/05/2014        31/08/2014 23:59:59 
233        27/09/2014        31/10/2014 23:59:59 
234        26/01/2015        26/01/2015 23:59:59
 
Per quanto riguarda il prg_listino non è detto che quello che ha il numero più alto sia anche il listino valido da prendere in considerazione. Ad esempio ho aggiunto un ulteriore listino (il 234) che era valido solo ed unicamente nella giornata di ieri. Attualmente, in base unicamente alle date, il listino valido è il 193.
 
Tra tutti i listini dell'esempio sopra noterai che il 193 è quello che ha come data di inizio, rispetto al listino 1, la data più vicina a quella odierna.
 
Potrebbe accadere, per alcuni listini, che quello valido potrebbe essere quello di default che inizia 1/1/1800 e quindi non posso escluderlo.
 
Spero di essermi spiegato bene.
 
Grazie ancora



 
 
SELECT top 1  LIstino.prg_listino, LIstino.dat_inizio_listino, 
LIstino.dat_fine_listino
FROM LIstino
WHERE (((LIstino.dat_inizio_listino)<=Date()) AND 
((LIstino.dat_fine_listino)>=Date()))
ORDER BY LIstino.dat_inizio_listino DESC;
 
 
ciao
BFS

 ...
 
Per esprimere "più vicina" bisogna una sottoquery. In SQL p.e.
 
SELECT prg_listino, dat_inizio_listino, dat_fine_listino
FROM NomeTabella
WHERE dat_inizio_listino =
(
  SELECT MAX(dat_inizio_listino)
  FROM NomeTabella
  WHERE dat_inizio_listino<=Date() AND dat_fine_listino>=Date()
)


Pensavo di aver risolto in questo modo ma:
Ho provato a fare una cosa del genere: 
 
Query1: come da te indicato ho fatto una query con i seguenti criteri dat_inizio_listino: <=Date() e dat_fine_listino: >=Date() che mi tira fuori i seguenti valori: 
 
1        01/01/1800        31/12/3000 23:59:59 
193        01/04/2014        31/12/3000 23:59:59 
 
Query2: 
 
SELECT * 
FROM Query1 
Where Query1.dat_inizio_listino IN 
(SELECT Max(query1.dat_inizio_listino) as DataIni 
from Query1;) 
 
mi restituisce solo: 
 
193        01/04/2014        31/12/3000 23:59:59 
 
Ma nel momento in cui vado a inserire anche il campo articolo alla famosa tabella (ogni articolo ha il suo prg_listino) la prima query continua naturalmente a funzionare senza problemi mentre  la seconda mi tira fuori, giustamente, un solo record.


 Ma nel momento in cui vado a inserire anche il campo articolo alla
 
famosa tabella (ogni articolo ha il suo prg_listino) la prima query 
continua naturalmente a
 
funzionare senza problemi mentre  la seconda mi tira fuori, giustamente, 
un solo record.
 
 
 
 
SELECT top 1 LIstino.prg_listino, LIstino.dat_inizio_listino, 
LIstino.dat_fine_listino, LIstino.codarticolo
FROM LIstino
WHERE (((LIstino.dat_inizio_listino)<=Date()) AND 
((LIstino.dat_fine_listino)>=Date()) AND ((LIstino.codarticolo)= 
[CODICERARTICOLODATROVARE]  ))


Così effettivamente funziona :)
A questo punto l'ultimo problema è tirare fuori tutti gli articoli con relativo listino valido... Naturalmente ho già provato a non mettere nessuna seleziona ma non funziona.
Spero di riuscire a risolvere senza scocciare ulteriormente.
Grazie a tutti



 
Per ottenere il risultato "raggruppato" per CodArticolo bisogna un 
riferimento alla query principale:
 
SELECT prg_listino, CodArticolo, dat_inizio_listino, dat_fine_listino
FROM NomeTabella AS T1
WHERE dat_inizio_listino =
(
  SELECT MAX(dat_inizio_listino)
  FROM NomeTabella
  WHERE dat_inizio_listino<=Date() AND dat_fine_listino>=Date()
  AND CodArticolo=T1.CodArticolo


Grandissimo funziona!! 
Non so veramente come ringraziarvi.
Grazie 
Andrea
