Я повинен очистити таблицю з дубльованими рядками:
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