DocumentID に複数のバージョンが割り当てられています。
DocID Version
ABC 1
ABC 2
ABC 3
DEF 1
DEF 2
古いバージョンを削除して、最新のものだけを残すにはどうすればよいですか? 削除後、これはテーブルに残ります。
DocID Version
ABC 3
DEF 2
DocumentID に複数のバージョンが割り当てられています。
DocID Version
ABC 1
ABC 2
ABC 3
DEF 1
DEF 2
古いバージョンを削除して、最新のものだけを残すにはどうすればよいですか? 削除後、これはテーブルに残ります。
DocID Version
ABC 3
DEF 2
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 の場合は独力で、まったく別の質問を投稿する方がよい場合があります。