Můžete DELETE
z cte:
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table)
DELETE FROM cte
WHERE RowRank > 1
ROW_NUMBER()
funkce přiřadí každému řádku číslo. PARTITION BY
se používá k zahájení číslování každé položky v této skupině, v tomto případě každé hodnoty uniqueid
začne číslovat od 1 a odtud půjde nahoru. ORDER BY
určuje, v jakém pořadí čísla jdou. Protože každý uniqueid
bude číslován od 1, každý záznam s ROW_NUMBER()
větší než 1 má duplicitní uniqueid
Chcete-li porozumět tomu, jak ROW_NUMBER()
funkce funguje, jen to vyzkoušejte:
SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid
Logiku ROW_NUMBER()
můžete upravit funkce pro nastavení, který záznam si ponecháte nebo odstraníte.
Chcete-li to například provést v několika krocích, nejprve smažte záznamy se stejným příjmením, ale různými křestními jmény, můžete přidat příjmení do pole PARTITION BY
:
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid, col3 ORDER BY col2)'RowRank'
FROM Table)
DELETE FROM cte
WHERE RowRank > 1