/ / Usuń wiersze z powielonymi wartościami [duplikat] - sql, sql-server

Usuń wiersze z duplikatami [duplicate] - sql, sql-server

Muszę oczyścić stół z podwójnymi wierszami:

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

Jeden gid może mieć wiele url wartości:

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

Chcę wykonać jedno zapytanie dla całej tabeli i usunąć wszystkie wiersze, w których gid i url są duplikatami. W powyższym przykładzie, po usunięciu, chcę mieć tylko 1, 2, 4 i 5 pozostałych.

Odpowiedzi:

12 dla odpowiedzi № 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

Kiedy jesteś zadowolony z pierwszego wyboru, którywskazuje wiersze, które będziesz przechowywać, usuń je i usuń komentarz z drugiego zaznaczenia. Gdy już to zrobisz, co wskazuje na wiersze, które usuniesz, usuń je i usuń komentarz z usunięcia.

A jeśli nie chcesz usuwać danych, po prostu zignoruj ​​skomentowane linie pod SELECT...


1 dla odpowiedzi nr 2
SELECT
MIN(id) AS id,
gid,
url
FROM yourTable
GROUP BY gid, url