【发布时间】:2019-06-04 10:46:15
【问题描述】:
我有一张姓名和日期表。我想删除名称重复的行,只保留最近日期的行。有时有多个重复的信息行。
我下面的代码可以工作,但是我想运行一个自动循环,当没有检测到更多重复时停止,或者学习一种更好/更有效的方法。
使用下面的代码,我目前的程序是:
查询1 查询2 查询3
重复直到不再删除重复项。
Table1:
ID Field1 Field2 Field3
3 Albert Jacobsen 12/5/2018
5 Mia Shaw 12/28/2018
6 Chris Mantle 6/14/2018
7 Albert Jacobsen 1/8/2019
8 Albert Jacobsen 11/15/2018
9 Chris Mantle 11/24/2018
Query 1:
SELECT Table1.Field1, Table1.Field2, Table1.Field3, Table1.ID INTO Table2
FROM Table1
GROUP BY Table1.Field1, Table1.Field2, Table1.Field3, Table1.ID
ORDER BY Table1.Field1 DESC , Table1.Field2 DESC , Table1.Field3 DESC;
Table2:
Field1 Field2 Field3 ID
Mia Shaw 12/28/2018 5
Chris Mantle 11/24/2018 9
Chris Mantle 6/14/2018 6
Albert Jacobsen 1/8/2019 7
Albert Jacobsen 12/5/2018 3
Albert Jacobsen 11/15/2018 8
Query 2:
SELECT Table2.Field1, Table2.Field2, Count(Table2.ID) AS CountOfID,
Min(Table2.ID) AS MinOfID INTO Temp_DeleteThese
FROM Table2
GROUP BY Table2.Field1, Table2.Field2
HAVING (((Count(Table2.ID))>1));
Table Temp_DeleteThese:
Field1 Field2 CountOfID MinOfID
Albert Jacobsen 3 3
Chris Mantle 2 6
Query 3:
DELETE DISTINCTROW Table1.*
FROM Temp_DeleteThese INNER JOIN Table1 ON Temp_DeleteThese.MinofID =
Table1.ID;
Resulting Table1:
ID Field1 Field2 Field3
5 Mia Shaw 12/28/2018
7 Albert Jacobsen 1/8/2019
8 Albert Jacobsen 11/15/2018
9 Chris Mantle 11/24/2018
如何循环代码直到删除重复项并且只保留最近的记录,或者更有效地执行此操作?
【问题讨论】:
-
您能否为我们更好地量化“有效”?它需要六个小时,而您希望它需要六分钟或六秒吗?
-
一般正确的时间范围是从六小时到六分钟。
标签: sql ms-access duplicates sql-delete