sql >> データベース >  >> RDS >> Sqlserver

SQL:重複を削除します

    ウィンドウ関数row_number()の教科書候補:

    ;WITH x AS (
        SELECT unique_ID
              ,row_number() OVER (PARTITION BY worker_ID,type_ID ORDER BY date) AS rn
        FROM   tbl
        )
    DELETE FROM tbl
    FROM   x
    WHERE  tbl.unique_ID = x.unique_ID
    AND    x.rn > 1
    

    これにより、(worker_ID,type_ID)の一連の重複が発生する状況も処理されます。 同じdateを共有します 。
    簡略化されたdata.SEのデモをご覧ください 。

    よりシンプルなバージョンに更新

    結局のところ、これは単純化できます。SQLServerでは、CTEから直接削除できます:

    ;WITH x AS (
        SELECT unique_ID
              ,row_number() OVER (PARTITION BY worker_ID,type_ID ORDER BY date) AS rn
        FROM   tbl
        )
    DELETE x
    WHERE  rn > 1
    


    1. 見出しなしでExcelでクエリ-Oracle

    2. SQL * Plus/SQLcl出力グリッドに垂直方向の境界線を追加する方法

    3. mysqlテーブルで欠落している行(日付)を見つける方法は?

    4. MySQLクエリ-今日から過去30日間の記録