2012-04-27 40 views
8

tôi cần phải xóa tất cả các hàng trùng lặp trừ sự xuất hiện đầu tiên hàng tương tự từ một Bảng Log có cùng customer_iddeactivation_date. Làm thế nào để đạt được điều đó với số câu lệnh sql tối thiểu.MSSQL Query để xóa các hàng trùng lặp từ một TABLE để lại hàng khác nhau trong bảng

Tôi đang sử dụng phiên bản Express MS SQL Server 2008.

+0

gì query u r sử dụng .. –

+2

Phiên bản nào của sql-server bạn đang sử dụng? – Arion

+0

@Arion sql 2008 express edition –

Trả lời

16

Cái gì như:

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

Bạn không cho chúng tôi nhiều việc phải làm. Nhưng có lẽ một cái gì đó như thế này:

;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

Hoặc:

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; 
Các vấn đề liên quan