2012-04-27 14 views
8

ich muß alle doppelten Zeilen außer dem ersten Auftreten ähnlicher Zeilen aus einer Tabelle Log mit den gleichen customer_id und deactivation_date löscht. Wie erreiche ich das mit einer minimalen Anzahl von SQL-Anweisungen?MSSQL Abfrage doppelte Zeilen aus einer Tabelle zu verlassen unterschiedliche Zeilen in der Tabelle löschen

Ich verwende MS SQL Server 2008 Express Edition.

+0

welche Abfrage u mit r .. –

+2

Welche Version von SQL-Server verwenden Sie? – Arion

+0

@Arion sql 2008 Express-Ausgabe –

Antwort

16

Etwas wie:

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

Sie geben uns nicht viel zur Arbeit. Aber vielleicht so etwas wie folgt aus:

;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

Oder:

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; 
Verwandte Themen