2012-04-27 22 views
8

necesito borrar todas las filas duplicadas, excepto la primera aparición de filas similares de una tabla Log tienen el mismo customer_id y deactivation_date. ¿Cómo lo logro con un número mínimo de sentencias sql?MSSQL de consulta para borrar registros duplicados de una tabla dejando las filas distintas en la tabla

Estoy utilizando MS SQL Server 2008 express edition.

+0

lo consulta u r utilizando .. –

+2

¿Qué versión de SQL-servidor está utilizando? – Arion

+0

@Arion sql 2008 express edition –

Respuesta

16

Algo así como:

DELETE FROM Log WHERE LogId NOT IN 
(SELECT Min(LogId) FROM Log GROUP BY customer_id, deactivation_date) 
2

No nos está dando demasiado para trabajar. Pero tal vez algo como esto:

;WITH CTE 
AS 
(
    SELECT 
     ROW_NUMBER() OVER(PARTITION BY [Log].customer_id ORDER BY 
           deactivation_date) AS RowNbr, 
     [Log].* 
    FROM 
     [Log] 
) 
DELETE FROM [Log] 
WHERE EXISTS 
    (
     SELECT 
      NULL 
     FROM 
      CTE 
     WHERE 
      CTE.RowNbr>1 
      AND CTE.log_id =[Log].log_id 
    ) 
14

O:

with cte as (
    select row_number() over (partition by customer_id, deactivation_date 
    order by log_id) as rn 
    from Log) 
delete from cte 
    where rn > 1; 
Cuestiones relacionadas