remove query one keep duplicate delete but sql sql-server duplicate-removal

query - sql server delete duplicate rows but keep one



Ayuda de eliminaciĆ³n de SQL Query Duplicate (4)

Necesito eliminar registros semi duplicados de la siguiente tabla

ID PID SCORE 1 1 50 2 33 20 3 1 90 4 5 55 5 7 11 6 22 34

Para cualquier PID duplicado que exista, quiero eliminar el registro de menor puntaje. En el ejemplo anterior, ID 1 sería eliminado. Intento encontrar una forma de hacerlo sin usar bucles pero realmente estoy luchando.

Cualquier ayuda sería apreciada.

Gracias


No puedo ver tu consulta, así que hice este ejemplo ...

SELECT PID, MAX(Score) FROM tblTable GROUP BY PID


prueba esto..

declare @tt table(id int, pid int,score int) insert into @tt select 1,1,50 union all select 2,33,50 union all select 8,33,80 union all select 3,1,90 union all select 4,5,50 union all select 5,5,10 union all select 6,6,10 union all select 7,6,50 --------- delete from @tt where id in ( select t1.id from @tt t1 inner join ( select MIN(score) tScore,pid tPid from @tt where pid in (select pid from @tt group by pid having count (pid) > 1) group by pid ) t2 on t1.pid=t2.tPid and t1.score=t2.tScore) select * from @tt


WITH q AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY pid ORDER BY score) AS rn FROM mytable ) DELETE FROM q WHERE rn = 1

Para dejar los resultados que no tienen duplicados:

WITH q AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY pid ORDER BY score) AS rn, COUNT(*) OVER (PARTITION BY pid) AS cnt FROM mytable ) DELETE FROM q WHERE rn = 1 AND cnt > 1


DELETE t.* FROM Table1 t JOIN (SELECT pid, MIN(score) minScore, MAX(id) maxId FROM Table1 GROUP BY pid) t1 ON t.pid = t1.pid AND t.score = t1.minScore AND t.id < t1.maxId