2014/05/02

REMOVER FILAS DUPLICADAS CON ROW_NUMBER

Hola, en esta entrega les mostraré una manera para remover duplicados en nuestras tablas temporales antes de pasarlos a tablas en productivo.

Para el caso de este ejemplo, crearé una tabla temporal con algunos datos de muestra.
IF OBJECT_ID (N'tablaPruebas', N'U') IS NOT NULL
DROP TABLE tablaPruebas

CREATE TABLE tablaPruebas ( 
 cve TINYINT
 , nombre VARCHAR(30)
 , fecha DATE
)

INSERT INTO tablaPruebas
VALUES( 1, 'PEDRO' , '20130101' ) , ( 1 , 'PEDRO' , '20130101' ) 
, ( 2 , 'JUAN', '20130403' )
,( 3, 'LUIS' , '20130521' ) , ( 3 , 'RODRIGO' , '20130525' ) , ( 3 , 'ENRIQUE' , '20130910' ) 
, ( 4 , 'ALBERTO', '20131014' ) , ( 5 , 'RICARDO', '20131015' )
Suponiendo que para este ejemplo, la llave primaria en la tabla en productivo es la columna cve podemos observar que tenemos filas duplicadas:
SELECT * FROM tablaPruebas
Para el ejemplo, se requiere insertar solo las filas más antiguas o las primeras en ser registradas, para ello utilizamos ROW_NUMBER con PARTITION BY por la columna cve y ordenamos por la fecha:
--APLICAMOS ROW_NUMBER
SELECT ROW_NUMBER() OVER ( PARTITION BY cve ORDER BY fecha ) as rn, *
FROM tablaPruebas

--UTILIZAMOS UN SUBQUERY
SELECT * FROM ( 
 SELECT ROW_NUMBER() OVER ( PARTITION BY cve ORDER BY fecha ) as rn, *
 FROM tablaPruebas
) AS x
WHERE rn = 1
Espero que les sirva.

SALUDOS!
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE

0 comentarios:

Publicar un comentario