У меня следующий запрос:
;WITH Duplicates AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY ChannelName, SerialNumber, ReadingDate ORDER BY ChannelName) AS Rownumber
FROM [Staging].[UriData]
)
DELETE FROM Duplicates WHERE Rownumber > 1
--AND ROWNUMBER >=< ???
OPTION (MAXRECURSION 0)
Это прекрасно работает и находит дубликаты в таблице.Однако таблица часто обновляется с исправленными данными.
Ко времени выполнения запроса могло произойти три или более обновлений.
Это означает, что я хочу удалить все, кроме самой последнейзаписей.В таблице есть поле метки времени, которое обозначает, когда произошла последняя вставка.Я предполагаю, что я должен использовать это поле, чтобы определить, какая строка является последней, а любая, которая не является наибольшим номером строки, удаляет их.Это правильный подход?
TIA