PDA

Visualizza la versione completa : group by in SQL


Kaev
23-10-2002, 11:07
Ciao a tutti,

sono alle prese con una select SQL che non riesco a "vedere"

ho le tabelle:


PERSONA (idPersona, Nome)
POSSIEDE (IdPersona, IdAutomobile, Data_Acquisto)
AUTOMOBILE (IdAutomobile, Targa)

Come fare una query che mi selezioni tutte le persone che possiedono un'auto, ma solo l'ultima acquistata?

Grazie in anticipo per qualsiasi risposta!! :)

ladyBlu
23-10-2002, 12:12
Per ottenere il risultato che vuoi io ho utilizzato due query, una nell'altra. Mi spiego:
la prima trova la dataAcquisto più recente, la seconda trova la persona in base alla dataAcquisto che ho trovato nella prima query.

Ti scrivo l'SQL delle due query separatamente:

1. SELECT Max(Possiede.DataAcquisto) AS MaxDiDataAcquisto FROM Possiede;

2. SELECT Automobile.IdAutomobile, Possiede.DataAcquisto AS Data, Persona.Nome, Automobile.Targa
FROM qryData LEFT JOIN (Persona RIGHT JOIN (Automobile RIGHT JOIN Possiede ON Automobile.IdAutomobile
= Possiede.IdAutomobile) ON Persona.idPersona = Possiede.IdPersona) ON qryData.MaxDiDataAcquisto =
Possiede.DataAcquisto ORDER BY Persona.Nome;


considera che il campo Data_Acquisto l'ho chiamato DataAcquisto, xchè mi dava problemi _
vedi se può andarti bene.
:ciauz:

Kaev
23-10-2002, 12:29
mi spiego meglio:

l'ultima macchina acquistata dalla singola persona... quindi non devo cercare l'ultima data in assoluto ma l'ultima data per **ogni persona**

è possibile farlo con un'unica query??

grazie cmq

ladyBlu
23-10-2002, 12:46
io ce l'ho fatta solo con due query:

1. SELECT Persona.idPersona, Persona.Nome, First
(Possiede.DataAcquisto) AS PrimoDiDataAcquisto
FROM Persona LEFT JOIN (Automobile RIGHT JOIN Possiede ON
Automobile.IdAutomobile = Possiede.IdAutomobile) ON Persona.idPersona
= Possiede.IdPersona
GROUP BY Persona.idPersona, Persona.Nome
ORDER BY Persona.Nome;

2. SELECT qryUltimaPerPersona.Nome,
qryUltimaPerPersona.PrimoDiDataAcquisto AS Data, Automobile.Targa
FROM qryUltimaPerPersona LEFT JOIN (Automobile RIGHT JOIN Possiede ON
Automobile.IdAutomobile = Possiede.IdAutomobile) ON
qryUltimaPerPersona.PrimoDiDataAcquisto = Possiede.DataAcquisto
ORDER BY qryUltimaPerPersona.Nome;


non sono riuscita a fare di meglio. Magari qualcun altro può darti un suggerimento migliore.
:ciauz:

Kaev
23-10-2002, 13:01
grazie, provo subito!

:ciauz:

Loading