/ / Видалити рядки з дубльованими значеннями [дублікат] - sql, sql-сервер

Видалити рядки з дубльованими значеннями [дублікат] - sql, sql-сервер

Я повинен очистити таблицю з дубльованими рядками:

id: serial id
gid: group id
url: string <- this is the column that I have to cleanup

Один gid може мати кілька url значення:

id    gid   url
----  ----  ------------
1     12    www.gmail.com
2     12    www.some.com
3     12    www.some.com <-- duplicate
4     13    www.other.com
5     13    www.milfsome.com <-- not a duplicate

Я хочу виконати один запит на всю таблицю і видалити всі рядки, де є gid і url дубльовані У вищезгаданому зразку, після видалення, я хочу залишити лише 1, 2, 4 і 5.

Відповіді:

12 для відповіді № 1
;WITH x AS
(
SELECT id, gid, url, rn = ROW_NUMBER() OVER
(PARTITION BY gid, url ORDER BY id)
FROM dbo.table
)
SELECT id,gid,url FROM x WHERE rn = 1 -- the rows you"ll keep
-- SELECT id,gid,url FROM x WHERE rn > 1 -- the rows you"ll delete
-- DELETE x WHERE rn > 1; -- do the delete

Як тільки ви будете радіти з першим вибором, якийвказує на ряди, які ви будете зберігати, видаліть і не коментуйте другий виділений. Після того, як ви будете задоволені тим, що вказує на ряди, які ви будете видаляти, вилучіть їх і скасуйте незмінюване видалення.

І якщо ви не хочете видаляти дані, просто ігноруйте коменовані рядки під SELECT...


1 для відповіді № 2
SELECT
MIN(id) AS id,
gid,
url
FROM yourTable
GROUP BY gid, url