>Cercavo un forum che mi potesse dare un aiuto per quanto riguarda
>access e credo di averlo trovato...
Ciao Giampiero,
Benvenuto sui forum di DNH
>ID-----------Nome--------------Data
>5------------Mario--------------01/08/2008
>6------------Mario--------------09/09/2008
>7------------Luca---------------15/09/2008
>8------------Mario--------------16/10/2008
>
>Vorrei realizzare una query che per ogni nome presente in archivio
>mi mantenga soltanto quello con l'ultima data eliminado i record
>vecchi.
Potresti prima di tutto scrivere un comando di SELECT che esegua una aggregazione per nome, restituendo la massima data per ogni nome:
SELECT Nome, MAX(Data) AS MaxData
FROM Nomi
GROUP BY Nome;
Ora puoi eseguire una LEFT OUTER JOIN tra la tabella Nomi e la query precedente, utilizzando come colonne di correlazione il Nome e la Data, ottenendo solo le righe non restituite dalla query (clausola Q.Nome IS NULL):
SELECT N.ID
FROM Nomi AS N
LEFT JOIN (
SELECT Nome, MAX(Data) AS MaxData
FROM Nomi
GROUP BY Nome
) AS Q
ON N.Nome = Q.Nome
AND N.Data = Q.MaxData
WHERE Q.Nome IS NULL;
Infine non ti resta che eliminare tali righe dalla tabella Nomi:
DELETE FROM Nomi
WHERE ID IN (
SELECT N.ID
FROM Nomi AS N
LEFT JOIN (
SELECT Nome, MAX(Data) AS MaxData
FROM Nomi
GROUP BY Nome
) AS Q
ON N.Nome = Q.Nome
AND N.Data = Q.MaxData
WHERE Q.Nome IS NULL
);
>Spero di essere stato chiaro...
Anch'io
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org