バージョン 2005 以降の SQL Server では、ROW_NUMBER で CTE (Common Table Expression) を使用できます。 重複を排除する機能:
;WITH LastPerUser AS ( SELECT ID, UserID, ClassID, SchoolID, Created, ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum' FROM dbo.YourTable ) SELECT ID, UserID, ClassID, SchoolID, Created, FROM LastPerUser WHERE RowNum = 1プレ>この CTE は、データを
UserIDで「分割」します。 、および各パーティションのROW_NUMBER関数は、1 から始まり、Created DESCの順に並べられた連番を渡します。 - したがって、最新の行はRowNum = 1になります。 (各UserIDごとに ) これは、その後の SELECT ステートメントで CTE から選択したものです。同じ CTE を使用して、重複を簡単に削除することもできます:
;WITH LastPerUser AS ( SELECT ID, UserID, ClassID, SchoolID, Created, ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum' FROM dbo.YourTable ) DELETE FROM dbo.YourTable t FROM LastPerUser cte WHERE t.ID = cte.ID AND cte.RowNum > 1プレ>同じ原則が適用されます:いくつかの基準でデータを「グループ化」(またはパーティション化) し、各データ パーティションのすべての行に連続番号を付け、「パーティション化された行番号」の値が 1 より大きい行は
DELETE.