Как удалить последнюю запись - PullRequest
0 голосов
/ 03 ноября 2011

Использование 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 Date Value

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

Нужна помощь по запросу

1 Ответ

3 голосов
/ 03 ноября 2011

Этого можно добиться, выполнив отбор и объединение в операторе 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.

...