2011-11-03 168 views
0

使用SQL Server 2000如何刪除最後一個記錄

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 
..... 
..... 

從上面的表格我想刪除每個ID的最後日期。

如何使查詢

預計輸出

ID Date Value 

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

需要查詢幫助

+1

SQL Server 2000上的[SQL Server ROW_NUMBER()可能重複?](http://stackoverflow.com/questions/4081753/sql-server-row-number-on-sql-server-2000) –

回答

3

您可以通過做一個子查詢做到這一點,並在DELETE語句加入。例如:

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 

請注意,我測試了這個SQL對SQL Server 2005,但我相信它也應該在SQL Server 2000中工作。

+2

+1可能的路要走,但要小心,如果{ID,Date} –

+0

@Conrad沒有獨特的限制好點。如果{ID,Date}不唯一,那麼在SQL Server 2000中這個問題變得更加困難。OMG Ponies在問題的評論中發佈的鏈接解釋了原因。在這種情況下,我想在SQL Server 2005以後可以使用ROW_NUMBER解決方案。 – rsbarro

相關問題