Newsgroup: it.comp.appl.access
Titolo: filtro record per data

Buongiorno a tutti.
Ho due tabelle tblSoci e tblSociDettagli.
Nella tabella SociDettagli memorizzo tutte le variazioni (tipo socio, n. quote, valore quote, ecc..) e per ogni record c'è la data in cui è intervenuta una variazione.
Nello stampare l'elenco soci storico, devo visualizzare i dettagli che rientrano nella data finale di cui chiedo la stampa.
Raggiungo il risultato con tre query.
La prima non prende i dettagli successivi alla data di stampa;
La seconda, con origine prima query, prende solo l'ultimo dettaglio.
La terza, con origine seconda query e tabella tblSociDettagli correlate con il campo IdSocioDettaglio, mi mostra tutti i campi relativi all'ultimo dettaglio.
C'è un modo per ottenere il medesimo risultato senza fare troppe query?
Ho provato i diversi raggruppamenti ma mi nostra sempre tutti i record precedenti alla data criterio.
O mi conviene inserire un campo "DataFine" nella tabella tblSocioDettaglio e inserire il giorno precedente al nuovo dettaglio per delimitare con una sola query il record corrispondente?
Scusate la lunghezza, spero di aver spiegato bene.
Grazie. 
Giuseppe


Secondo me puoi unire la seconda e la terza, in un'unica query. 
Tra l'altro non credo sia utile andare oltre perché comunque se ho capito bene per visualizzare i dati avrai sempre una maschera e una sottomaschera (o un report/sottoreport) quindi per forza di cose devi avere due query.
 
Ti mostro un esempio che a me sembra funzionare e dovrai adattare alla tua situazione
 
SELECT tblSocioDettaglio.idSocioDettaglio, tblSocioDettaglio.Det1, tblSocioDettaglio.Det2, tblSocio.DetX, tblSocio.DetY
FROM (tblSocioDettaglio INNER JOIN (
 
SELECT Max(tblSocioDettaglio.idSocioDettaglio) AS MaxDettaglio FROM tblSocioDettaglio WHERE (((tblSocioDettaglio.idSocio)=323))
 
)  AS dettagliomax ON tblSocioDettaglio.idSocioDettaglio= dettagliomax.MaxDettaglio) 
INNER JOIN tblSocio ON tblSocioDettaglio.idSocio = tblSocio.idSocio
 
 
 
 


ah nel tuo caso oltre alla condizione tblSocioDettaglio.idSocio=323 dovrai aggiungere l'altra condizione sulla data


Scusa Michele.
Non ho capito la tua soluzione (forse una subquery?). 
Mia prima query:
SELECT tblSocioDettagli.IdSocioDettaglio, tblSocioDettagli.IdSocio, tblSocioDettagli.DataDettaglio
FROM tblSocioDettagli
GROUP BY tblSocioDettagli.IdSocioDettaglio, tblSocioDettagli.IdSocio, tblSocioDettagli.DataDettaglio
HAVING (((tblSocioDettagli.IdSocio)=1) AND ((Last(tblSocioDettagli.DataDettaglio))<=#12/31/1996#));
Mia seconda query:
SELECT Last(miaprimaquery.IdSocioDettaglio) AS UltimoDiIdSocioDettaglio
FROM qryDettagliSociStoriciPrecedenti;
Mia terza query:
SELECT tblSocioDettagli.IdSocioDettaglio, tblSocioDettagli.IdSocioTipo, tblSocioDettagli.IdSocioDettaglioTipo, tblSocioDettagli.DataDettaglio, tblSocioDettagli.NumeroQuote, tblSocioDettagli.ValoreQuota, tblSocioDettagli.ImportoQuota
FROM miasecondaquery INNER JOIN tblSocioDettagli ON miasecondaquery.UltimoDiIdSocioDettaglio = tblSocioDettagli.IdSocioDettaglio;
Potresti specificare meglio?
Grazie
Giuseppe

Esatto. Una subquery. 
 
SELECT tblSocioDettagli.IdSocioDettaglio, tblSocioDettagli.IdSocioTipo, tblSocioDettagli.IdSocioDettaglioTipo, tblSocioDettagli.DataDettaglio, tblSocioDettagli.NumeroQuote, tblSocioDettagli.ValoreQuota, tblSocioDettagli.ImportoQuota
FROM (
SELECT Last(miaprimaquery.IdSocioDettaglio) AS UltimoDiIdSocioDettaglio 
FROM qryDettagliSociStoriciPrecedenti
) as miasecondaquery INNER JOIN tblSocioDettagli ON miasecondaquery.UltimoDiIdSocioDettaglio = tblSocioDettagli.IdSocioDettaglio
 
Volendo potresti anche unire a questa query la prima con il risultato che avresti, se la prima query ha 100 record, 100 record in cui 7 campi sono uguali (e vengono dalla query 2+3) e gli altri che cambiano... ma non è proprio il massimo dell'ottimizzazione.


mi sa che ho sbagliato, non so. però scritta così mi piace di più.
SELECT tblSocioDettagli.IdSocioDettaglio, tblSocioDettagli.IdSocioTipo, tblSocioDettagli.IdSocioDettaglioTipo, tblSocioDettagli.DataDettaglio, tblSocioDettagli.NumeroQuote, tblSocioDettagli.ValoreQuota, tblSocioDettagli.ImportoQuota
FROM tblSocioDettagli INNER JOIN (
SELECT Last(miaprimaquery.IdSocioDettaglio) AS UltimoDiIdSocioDettaglio
FROM qryDettagliSociStoriciPrecedenti
) as miasecondaquery ON tblSocioDettagli.IdSocioDettaglio = miasecondaquery.UltimoDiIdSocioDettaglio


Grazie Michele.
Appena posso ci provo e ti faccio sapere.
Grazie tante.
Giuseppe