我有一些需要帮助的具有挑战性的删除语句。我正在尝试在同一个表上删除多个具有多个连接的重复记录。
这是我的数据示例
versionid(PK) FileID(FK) 版本 DeleteDate DeleteIndicator
1 1 1 12/01/2003 1
2 1 1 12/02/2003 1
3 1 1 null 0
4 2 2 01/02/2004 1
5 2 2 01/03/2005 1
6 2 2 01/03/2006 1
我需要删除的数据是由 FileId 和 DeleteDate 小于 04/01/2011 且 DeleteIndicator 为 = 1 的版本匹配的所有重复数据。但是,我需要将最高版本 ID 保留在重复数据之外相同的 FileId 和版本
删除后我会剩下这个:
versionid(PK) FileID(FK) 版本 DeleteDate DeleteIndicator
2 1 1 12/02/2003 1
3 1 1 null 0
6 2 2 01/03/2006 1
我有一个带有多个连接的选择,可以为我提供上述记录。我只是不知道如何将其变成删除语句。这是我的选择声明。
SELECT t.VersionID ,
t.FileID ,
t.version ,
COUNT(*) ,
t.DeleteDate ,
t.DeleteIndicator
FROM tblFileVersions t
JOIN ( SELECT VersionID ,
FileID ,
MAX(VersionID) AS MaxVersion ,
DeleteDate ,
DeleteIndicator
FROM tblFileVersions
GROUP BY VersionID ,
FileID ,
DeleteDate ,
DeleteIndicator
) x ON t.FileID = x.FileID
WHERE t.DeleteDate < '2011/04/01'
AND t.DeleteIndicator = 1
AND t.VersionID < MaxVersion
GROUP BY t.VersionID ,
t.FileID ,
t.version ,
t.DeleteDate ,
t.DeleteIndicator ,
Version
HAVING COUNT(*) > 1
我需要做的就是把我拥有的东西变成一个删除语句。抱歉,如果我的文本格式全部搞砸了,这是我第一次在这里发帖。任何帮助将非常感谢您的时间。