
Tratamiento de registros duplicados SQL SERVER 2008
Publicado por Elías (10 intervenciones) el 10/11/2014 17:57:16
Buenos días, amigos:
Estuve partiéndome la cabeza con este tema, hay mucha información, pero disgregada y poco acertada. Espero que mi experiencia les sirva de algo.
Tengo una tabla con casi dos millones de registros en los que pude detectar duplicados haciendo.
Por alguna razón la aplicación está duplicando registros, no es el caso resolverla, por asuntos de copy right, pero si el hecho de que si existen 3 registros repetidos, deben eliminarse dos y quedar sólo uno.
El asunto es que navegando por la red me encontré el siguiente arto. para SQL 2005 de Pinal Dave quien utiliza el siguiente script para borrar registros duplicados(ya adaptada a mi tabla):
en mi caso hice una modificación muy breve y en la parte de delete escribí lo siguiente:
Esto para efectos de asegurar el borrado de los registros sin perderlos y aprovechando para garantizar la unicidad de los mismos.
Luego de eso, borraré los duplicados de mi tabla inicial y re-insertaré los registros únicos que antes estaban duplicados, usando la versión que contiene el delete.
Dudas, recomendaciones y comentarios son bienvenidos. Saludos.
Estuve partiéndome la cabeza con este tema, hay mucha información, pero disgregada y poco acertada. Espero que mi experiencia les sirva de algo.
Tengo una tabla con casi dos millones de registros en los que pude detectar duplicados haciendo.
1
2
3
4
5
6
Select
fecha, hora,phonecliente,phonedespachador
from llamadas
having count(*)>1
group by
fecha, hora,phonecliente,phonedespachador order by phonedespachador asc.
Por alguna razón la aplicación está duplicando registros, no es el caso resolverla, por asuntos de copy right, pero si el hecho de que si existen 3 registros repetidos, deben eliminarse dos y quedar sólo uno.
El asunto es que navegando por la red me encontré el siguiente arto. para SQL 2005 de Pinal Dave quien utiliza el siguiente script para borrar registros duplicados(ya adaptada a mi tabla):
1
2
3
4
5
6
7
8
9
10
11
WITH CTE (fecha, hora,phonecliente,phonedespachador, Duplicados)
AS
(
SELECT fecha, hora,phonecliente,phonedespachador,
ROW_NUMBER() OVER(PARTITION BY fecha, hora,phonecliente,phonedespachador ORDER BY phonedespachador) AS Duplicados
FROM llamadas
)
DELETE
FROM CTE
WHERE Duplicados > 1
GO
en mi caso hice una modificación muy breve y en la parte de delete escribí lo siguiente:
1
2
3
4
5
6
7
8
9
10
11
WITH CTE (fecha, hora,phonecliente,phonedespachador, Duplicados)
AS
(
SELECT fecha, hora,phonecliente,phonedespachador,
ROW_NUMBER() OVER(PARTITION BY fecha, hora,phonecliente,phonedespachador ORDER BY phonedespachador) AS Duplicados
FROM llamadas
)Select distinct
fecha, hora,phonecliente,phonedespachador
into REG_EXDUPLICADOS
FROM CTE
WHERE Duplicados > 1
Esto para efectos de asegurar el borrado de los registros sin perderlos y aprovechando para garantizar la unicidad de los mismos.
Luego de eso, borraré los duplicados de mi tabla inicial y re-insertaré los registros únicos que antes estaban duplicados, usando la versión que contiene el delete.
Dudas, recomendaciones y comentarios son bienvenidos. Saludos.
Valora esta pregunta


0