从表中的多个重复项中删除特定记录
Posted
技术标签:
【中文标题】从表中的多个重复项中删除特定记录【英文标题】:Delete specific record from multiple duplicates in the table 【发布时间】:2019-03-05 16:34:20 【问题描述】:如何从多个重复项中删除特定记录 下面是表格,例如
这只是其中一个例子,我们有很多这样的案例。我需要从这张表中删除排名 2 和 3。
请建议我识别重复记录和删除特定行的最佳方法
【问题讨论】:
你使用了哪个 dbms 请以文本形式发布数据 您能指定要删除哪些重复项吗?例如,排名较高的那个(与您的问题不匹配) - 顺便说一下,这些并不完全重复,因为排名不同 删除哪一条重复记录重要吗?比如Rank 1和Rank之间为什么建议删除Rank 2,Rank 3和Rank之间为什么是Rank 3? 排名甚至是您数据的一部分吗?另外,我们如何知道 Payroll_no 应该与什么 emp_ID 相关联? 【参考方案1】:这应该可以工作
delete
from <your table> t
where rank != (select top(rank)
from <your table> tt
where tt.emp_id = t.emp_id
order by rank desc --put asc if you want to keep the lowest rank
)
group by t.emp_id
【讨论】:
【参考方案2】:我不鼓励删除记录,但此解决方案可以帮助记录过期或删除它们:
该表应该有一个唯一的 ID 和一个字段,可以让您识别记录已过期。如果没有,我建议将其添加到表中。您可以在查询中创建一个复合 ID,但以后您会希望拥有这些属性。
创建一个查询来标识 RANK 1 的每条记录。这将是您的子查询。
编写您的 UPDATE 查询
UPDATE A
SET [EXPIRE_DTTM] = GETDATE()
FROM *TableNameWithTheRecords* A
INNER JOIN (*SubQuery*) B ON A.UniqueID = B.UniqueID
**如果你真的想删除记录,使用这个:
DELETE FROM *TableNameWithTheRecords*
WHERE *UniqueID* = (SELECT *UniqueID* FROM *TableNameWithTheRecords* WHERE RANK <> 1)
【讨论】:
【参考方案3】: WITH tbl_alias AS
(
SELECT emp_ID,
RN = ROW_NUMBER() OVER(PARTITION BY emp_ID ORDER BY emp_ID)
FROM tblName
)
DELETE FROM tbl_alias WHERE RN > 1
【讨论】:
以上是关于从表中的多个重复项中删除特定记录的主要内容,如果未能解决你的问题,请参考以下文章