2014-09-26 65 views
2

我有一个表结构像下面查找从表中的重复记录,并删除所有,但一个与

FileId  FileName   CreatedBy  CreationDate 

------- ----------  -----------  ------------ 
File1_1 File1    User1  2014/09/12 17:10:49 
File1_2 File1    User1  2014/09/11 17:45:49 
File2_1 File2    User2  2014/05/11 17:45:22 
File2_3 File2    User1  2014/08/11 17:47:22 

给我想写一个查询,会得到与他们的名字谁也重复条目和删除文件的最新日期所有条目,但一个与最晚日期.. 例如,在当前的例子将删除记录ID为File1_2File2_1

回答

2

开始用SELECT查询标识的行你想删除。

SELECT y.CreatedBy, y.FileId, y.FileName, y.CreationDate 
FROM YourTable AS y 
WHERE 
    y.CreationDate < 
     DMax(
      "CreationDate", 
      "YourTable", 
      "FileName='" & y.FileName & "'" 
      ); 

在验证查询标识正确的行,将其转换为DELETE查询。

DELETE 
FROM YourTable AS y 
WHERE 
    y.CreationDate < 
     DMax(
      "CreationDate", 
      "YourTable", 
      "FileName='" & y.FileName & "'" 
      ); 
+0

非常感谢你这只是工作完美...的 – 2014-09-26 17:47:47

+0

一个问题如果不是删除整个行如果我想更新“是/否”类型字段我该怎么办呢..我张贴我想查询.. – 2014-09-26 17:52:44

+0

更新文件 SET锁定=真 从文件中为Y WHERE y.CreationDate < DMAX( ‘CreationDate’ , “Files”, “FileName ='”&y.FileName&“'” ); – 2014-09-26 17:53:01

0
DELETE TableA 
FROM TableA A 
INNER JOIN (
SELECT MAX(creationDate) as dt, FileId FROM TableA 
GROUP by FileId 
HAVING count(*) > 1 
) T 
where A.FileId = T.FileId 
and A.dt < T.dt 
+0

说,在FROM子句中的一些语法错误表名是“文件” – 2014-09-26 17:21:13