ウィンドウ関数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
を共有します 。
簡略化された
よりシンプルなバージョンに更新
結局のところ、これは単純化できます。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