1

DocumentID に複数のバージョンが割り当てられています。

DocID  Version
ABC    1
ABC    2
ABC    3
DEF    1
DEF    2

古いバージョンを削除して、最新のものだけを残すにはどうすればよいですか? 削除後、これはテーブルに残ります。

DocID  Version
ABC    3
DEF    2
4

1 に答える 1

6

SQL Server 2005 以降:

;WITH x AS (SELECT DocID, Version, rn = ROW_NUMBER() OVER 
  (PARTITION BY DocID ORDER BY Version DESC)
  FROM dbo.tablename
)
DELETE x WHERE rn > 1;

SQL Server 2000 の場合は、もう少し複雑です。(バージョン情報を含めると常に便利です。)

DELETE t
FROM dbo.tablename AS t
LEFT OUTER JOIN 
(
  SELECT DocID, Version = MAX(Version)
  FROM dbo.tablename
  GROUP BY DocID
) AS t2
ON t.DocID = t2.DocID
AND t.Version = t2.Version
WHERE t2.DocID IS NULL;

どうやら、この後者のクエリは MySQL でも機能するようです (@bluefeet に感謝)。

MySQL の場合は独力で、まったく別の質問を投稿する方がよい場合があります。

于 2012-09-12T13:57:54.803 に答える