Два метода, протестированные в хранилище данных SQL Azure с использованием CTE
;WITH cte AS
(
SELECT *, ROW_NUMBER() OVER( PARTITION BY ID ORDER BY [Date] ) rn
FROM #tmp
)
SELECT [Date], name, ID
FROM cte
WHERE rn = 1
Или, если вы хотите перенести оставшиеся данные в новую таблицу, вы можете объединить CTE и CTAS в хранилище данных SQL Azure, например:
CREATE TABLE dbo.yourNewTable
WITH
(
CLUSTERED COLUMNSTORE INDEX,
DISTRIBUTION = HASH( ID )
-- Optionally add partition scheme here if required
)
AS
WITH cte AS
(
SELECT
[Date],
MIN(Name) OVER( PARTITION BY ID ) name,
ID,
ROW_NUMBER() OVER( PARTITION BY ID ORDER BY [Date] ) rn
FROM dbo.yourTable
)
SELECT [Date], name, ID
FROM cte
WHERE rn = 1
OPTION ( LABEL = 'CTAS : Dedupe' );
Обратите внимание на разницу в поведении для RANK
и ROW_NUMBER
.