2014-09-26 68 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