8

同じと。を持つテーブルから類似した行が最初に出現することを除いて、重複するすべての行を削除する必要があります。最小数のSQLステートメントでこれを実現するにはどうすればよいですか。Logcustomer_iddeactivation_date

MS SQL Server 2008ExpressEditionを使用しています。

4

3 に答える 3

16

何かのようなもの:

DELETE FROM Log WHERE LogId NOT IN 
 (SELECT Min(LogId) FROM Log GROUP BY customer_id, deactivation_date)
于 2012-04-27T07:29:42.103 に答える
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;
于 2012-04-27T07:32:38.887 に答える
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 
    )
于 2012-04-27T07:28:08.983 に答える