2012-04-27 48 views
8

我需要從具有相同customer_iddeactivation_date一個表Log刪除除類似的行的第一次出現所有重複行。我如何用最少數量的sql語句實現這一目標。MSSQL查詢刪除從一個表的重複行留下不同的行表

我正在使用MS SQL Server 2008 express版本。

+0

ü[R使用何種查詢.. – 2012-04-27 07:24:24

+2

什麼版本的SQL服務器您使用的是? – Arion 2012-04-27 07:24:37

+0

@Arion sql 2008 express edition – 2012-04-27 07:25:27

回答

16

喜歡的東西:

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

你沒有給我們太多的工作。但是,也許是這樣的:

;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

或者:

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;