2011-11-03 3 views
0

En utilisant SQL Server 2000Comment supprimer le dernier enregistrement

Tableau

ID Date Value 

001 23-02-2009 300 
001 24-02-2009 400 
001 25-02-2009 150 
002 23-02-2009 300 
002 24-02-2009 400 
003 23-02-2009 150 
..... 
..... 

Dans le tableau ci-dessus que je veux supprimer la dernière date pour chaque ID.

Comment faire une requête

Sortie prévue

ID Date Value 

    001 23-02-2009 300 
    001 24-02-2009 400 
    002 23-02-2009 300 
    ..... 
    ..... 
    ..... 

Besoin d'aide Recherche

+1

duplication possible de [SQL Server ROW_NUMBER() sur SQL Server 2000?] (Http://stackoverflow.com/questions/4081753/sql-server-row-number-on-sql-server-2000) –

Répondre

3

Vous pouvez y parvenir en faisant une sous-sélection et se joindre à la déclaration DELETE. Par exemple:

DECLARE @myTable TABLE(ID VARCHAR(3), [Date] DATETIME, Value INT) 
INSERT INTO @myTable VALUES('001', CONVERT(DATETIME, '23-02-2009', 103), 300) 
INSERT INTO @myTable VALUES('001', CONVERT(DATETIME, '24-02-2009', 103), 400) 
INSERT INTO @myTable VALUES('001', CONVERT(DATETIME, '25-02-2009', 103), 150) 
INSERT INTO @myTable VALUES('002', CONVERT(DATETIME, '23-02-2009', 103), 300) 
INSERT INTO @myTable VALUES('002', CONVERT(DATETIME, '24-02-2009', 103), 400) 
INSERT INTO @myTable VALUES('003', CONVERT(DATETIME, '23-02-2009', 103), 150) 

DELETE @myTable 
FROM @myTable M 
JOIN (SELECT ID, MAX([Date]) as [Date] FROM @myTable GROUP BY [ID]) G 
    ON G.ID = M.ID AND G.[Date] = M.[Date] 

SELECT * FROM @myTable 

Veuillez noter que j'ai testé ce SQL par rapport à SQL Server 2005, mais je crois que cela devrait également fonctionner dans SQL Server 2000.

+2

+1 Probablement le chemin à parcourir, mais attention s'il n'y a pas de contrainte unique sur {ID, Date} –

+0

@Conrad Bon point. Si {ID, Date} n'est pas unique, ce problème devient beaucoup plus difficile dans SQL Server 2000. Le lien que OMG Ponies a posté dans le commentaire de la question explique pourquoi. Dans ce cas, je suppose qu'une solution ROW_NUMBER peut être utilisée dans SQL Server 2005 et ultérieur. – rsbarro

Questions connexes