删除旧版本条目的声明

Ton*_*nyC 1 sql sql-server sql-server-2012

我有几个版本分配给DocumentID.

DocID  Version
ABC    1
ABC    2
ABC    3
DEF    1
DEF    2
Run Code Online (Sandbox Code Playgroud)

如何删除旧版本并仅保留最新版本?删除后,这应保留在表中:

DocID  Version
ABC    3
DEF    2
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 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;
Run Code Online (Sandbox Code Playgroud)

对于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;
Run Code Online (Sandbox Code Playgroud)

显然后一个查询也适用于MySQL(感谢@bluefeet).

对于MySQL你是独立的,你可能最好发布一个完全不同的问题.