Duplicate removal 保留第一个重复记录并删除其余记录

Duplicate removal 保留第一个重复记录并删除其余记录,duplicate-removal,sql-delete,ms-access-2003,Duplicate Removal,Sql Delete,Ms Access 2003,几乎完成了我想要完成的任务,但我的表更复杂,没有主键。我也不太明白上面的答案,t1和t2是什么意思。如果这个答案适用于我,如果有人解释代码,我将不胜感激 我有几个月的表格,其中包含客户信息和他们持有的政策。每个客户端都有一个唯一的策略ID,但它们可以有多个策略,从而在同一个策略ID下产生多个记录。每个字段中的重复记录可以完全不同或完全相同 出于我的目的,我只想为每个保单ID保留一条记录。理想情况下,保留的记录是年龄最高的记录,但如果太复杂,则不需要这样做。注意,可能有多个记录的年龄是该特定策略I

几乎完成了我想要完成的任务,但我的表更复杂,没有主键。我也不太明白上面的答案,t1和t2是什么意思。如果这个答案适用于我,如果有人解释代码,我将不胜感激

我有几个月的表格,其中包含客户信息和他们持有的政策。每个客户端都有一个唯一的策略ID,但它们可以有多个策略,从而在同一个策略ID下产生多个记录。每个字段中的重复记录可以完全不同或完全相同

出于我的目的,我只想为每个保单ID保留一条记录。理想情况下,保留的记录是年龄最高的记录,但如果太复杂,则不需要这样做。注意,可能有多个记录的年龄是该特定策略ID的最大年龄,那么我们保留哪一个记录并不重要

我不打算创建主键,因为在某些情况下,我将在同一策略ID下保留两条记录,我将自己修改代码。我也不想创建另一个表,因为我正在处理10多个表。有人建议使用
first()
,但我不知道如何将其合并到查询中

如果您需要任何其他信息,请告诉我,并提前感谢您的帮助

=========更新#1


好的,看起来我的问题有点不切实际,所以我将添加一个自动编号主键。我该怎么做呢?

以下几行:

DELETE Policies.*
FROM Policies
WHERE Policies.ID Not In (
   SELECT TOP 1 id
   FROM   policies p
   WHERE  p.policyid = policies.policyid
   ORDER  BY createdate DESC, id )

在这些方面:

DELETE Policies.*
FROM Policies
WHERE Policies.ID Not In (
   SELECT TOP 1 id
   FROM   policies p
   WHERE  p.policyid = policies.policyid
   ORDER  BY createdate DESC, id )

您应该考虑添加主键,因为它使得识别单个记录变得更容易,并且有助于删除DUPS。注:拥有主键并不意味着你不能继续拥有DUP。我认为你必须在某些事情上让步。要么你需要创建一个新的表,要么你必须添加一个唯一的密钥。你应该考虑添加主键,因为它使得识别单个记录变得更容易,并且有助于删除DUPS。注:拥有主键并不意味着你不能继续拥有DUP。我认为你必须在某些事情上让步。您需要创建一个新表,或者必须添加一个唯一的键。我尝试自行运行内括号
SELECT
语句,它要求我输入
Policies.PolicyID
的参数值。我可以确认我理解你的代码吗?ID=自动编号主键;政策=表格;P=策略表。那么,最后一句话不是永远正确吗?此外,内括号仅输出一条记录。idea使用两个ID,文本中提到的可以复制的策略ID和新的自动编号ID。内括号为每个策略id输出一条记录,这就是您希望得到的结果。我用一个示例表进行了测试。哦,好的,对不起,我只是理解了代码。我在一个有30k条记录的表上进行了测试。它似乎起作用了!所以,谢谢你!不过,最后一件事是,查询运行了很长时间——这正常吗?我只是担心,因为我的一个表有900k条记录。像这样的查询不会很快。你必须经常这样做吗?不经常,这是一项一次性的研究,但我有15张桌子要做,其中14张是~35k,一张是900k。我正在检查我做的测试查询-它做得大多数都是对的,但是应该删除的两条记录仍然存在…看不到这两条记录有什么特殊之处…我尝试自己运行内括号
SELECT
语句,它要求我输入
Policies.PolicyID
的参数值。我可以确认我理解你的代码吗?ID=自动编号主键;政策=表格;P=策略表。那么,最后一句话不是永远正确吗?此外,内括号仅输出一条记录。idea使用两个ID,文本中提到的可以复制的策略ID和新的自动编号ID。内括号为每个策略id输出一条记录,这就是您希望得到的结果。我用一个示例表进行了测试。哦,好的,对不起,我只是理解了代码。我在一个有30k条记录的表上进行了测试。它似乎起作用了!所以,谢谢你!不过,最后一件事是,查询运行了很长时间——这正常吗?我只是担心,因为我的一个表有900k条记录。像这样的查询不会很快。你必须经常这样做吗?不经常,这是一项一次性的研究,但我有15张桌子要做,其中14张是~35k,一张是900k。我检查了我做的测试查询-大部分都做对了,但是应该删除的两条记录仍然存在…看不到这两条记录有什么特别之处。。。