使用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
.....
.....
.....
需要查询帮助
答案 0 :(得分: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 Server 2005测试了此SQL,但我相信它也适用于SQL Server 2000。