Newsgroup: it.comp.appl.access
Titolo: Problema di selezione ultimo intervento

Buongiorno a tutti.
Premettendo che non sono un esperto di DB e ho il seguente problema.
In questo DB ACCESS (97) per la gestione degli interventi sugli
estintori
TInteventi
   IDIntervento
   NumeroIntervento
   Data
TRigheInterventi
   IDRigaIntervento
   IDIntervento
   IDEstintore
   Intervento
TEstintori
   IDEstintore
   NumeroEstintore
   Matricola
Dove le tabelle sono correlate tra loro con delle relazioni “UNO A
MOLTI” in questo modo
TInterventi -----> TRigheInterventi <------ TEstitnori
Devo eseguire una query di selezione per ricavare i record della
TRigheInterventi per ogni estintore su cui è stato eseguito l’ultimo
intervento (in base al campo Data della TInterventi).
Io sono riuscito solo a creare questa query che mi restituisce per
ogni IDEstitnore la Data dell’ultimo intervento:
SELECT
   TRigheInterventi.IDEstintore,
   Max(TInterventi.Data) AS Data
FROM TInterventi INNER JOIN TRigheInterventi ON
TInterventi.IDIntervento = TRigheInterventi.IDIntervento
GROUP BY
   TRigheInterventi.IDEstintore
HAVING
  (((Max(TInterventi.Data))<>False))
Però a me serve l’IDRigaIntervento e da qui in poi non so come
muovermi.
Grazie a tutti, Flavio

   (((Max(TInterventi.Data))<>False))
Apparentemente, questa riga non ha senso.
Per il resto, salvati questa query, diciamo che la chiami
q_UltimiInterventi.
Fai un'altra query che associa idEstintore, idRigaIntervento e
DataIntervento per tutti gli interventi:
SELECT DISTINCT tInterventi.idIntervento, tInterventi.Data,
tRigheInterventi.idEstintore FROM iInterventi LEFT JOIN
tRigheInterventi ON tInterventi.RigaIntervento =
tRigheInterventi.idIntervento
te la salvi e la associ con la query q_UltimiInterventi, dovresti
essere apposto.
cia'
Max

 wrote:
Grazie 1000 per la risposta.... ma cosa intendi per associare le
query? Devo relazionarle? Cmq adesso provo.
Poi volevo chiedere questo:
non si può, quando la query
SELECT
   TRigheInterventi.IDEstintore,
   Max(TInterventi.Data) AS Data
FROM TInterventi INNER JOIN TRigheInterventi ON
TInterventi.IDIntervento = TRigheInterventi.IDIntervento
GROUP BY
   TRigheInterventi.IDEstintore
HAVING
  (Max(TInterventi.Data))
soddisfa la condizione Max(TInterventi.Data) (e quindi si "ferma" su
uno specifico record della TRigheInterventi), ricavare direttamente
IDRighaIntervento?
Spero di non averla sparata troppo grossa :-)

 IDRighaIntervento?
No, o almeno non direttamente. Max lavora su aggregati di record, non
su uno specifico.
Cia'
Max

Allora.
La query che mi hai consigliato è questa (in teoria c'era un piccolo
errorino nella condizione della JOIN):
SELECT DISTINCT
 TInterventi.Data,
 TRigheInterventi.IDEstintore,
 TRigheInterventi.IDRigaIntervento
FROM TInterventi LEFT JOIN TRigheInterventi ON
TInterventi.IDIntervento = TRigheInterventi.IDIntervento
e la salvo come QUERY2. Se ho capito bene con questa mi trovo i record
di TRigheInterventi che hanno TInterventi.IDIntervento =
TRigheInterventi.IDIntervento.
Mentre la QUERY1 e questa:
SELECT
   TRigheInterventi.IDEstintore,
   Max(TInterventi.Data) AS Data
FROM TInterventi INNER JOIN TRigheInterventi ON
TInterventi.IDIntervento = TRigheInterventi.IDIntervento
GROUP BY
   TRigheInterventi.IDEstintore
HAVING
  (Max(TInterventi.Data))
e con questa mi trovo le ultime date di intervento per estintore.
Adesso dovrei collegare la QUERY2 con la QUERY1 in modo da ottenere
solo i record della QUERY2 che hanno l'accoppiata DATA (univoca) e
IDEstintore (univoco) presenti nella QUERY1?
E' corretto il ragionamento?
Se si.... come faccio????
Grazie ancora, Flavio

Contrordine
Usando questa query
SELECT
 TRigheInterventi.IDRigaIntervento
FROM QUERY1 INNER JOIN
 (TaInterventi INNER JOIN TRigheInterventi ON TInterventi.IDIntervento
= TRigheInterventi.IDIntervento)
 ON
 (TUltimaDataEstintore.Data = TInterventi.Data) AND
(QUERY1.IDEstintore = TRigheInterventi.IDEstintore)
in cui QUERY1 è quella sopracitata, penso di aver risolto.
Adesso controllo bene.
Cmq grazie a tutti.
Flavio

 Se si.... come faccio????
Elementare, Watson:
SELECT Query1.*, Query2.* FROM Query1 INNER JOIN Query2 ON
Query1.idEstintore=Query2.idEstintore AND Query1.Data=Query2.Data
cia'
Max

 Se si.... come faccio????
Elementare, Watson:
