如何解决在 SQL 中保留较高的值并删除较低的值
新年快乐。
我不确定如何执行 sql 以保留最高级别的 clientID 记录,同时删除其他记录?
我的表如下
并希望有以下
基本上,它会删除重复的 clientID 行,但保留该 clientID 记录的最高级别。
感谢您的指导。
解决方法
此查询适用于大多数 SQL 变体(不是 MySQL ROW_NUMBER() 按 Level
对 ClientID
值进行排名,并删除除该 Level
值具有最大 ClientID
的行以外的所有行:
WITH CTE AS (
SELECT ClientID,Level,ROW_NUMBER() OVER (PARTITION BY ClientID ORDER BY Level DESC) AS rn
FROM data
)
DELETE FROM data
WHERE (ClientId,Level) IN (
SELECT ClientId,Level
FROM CTE
WHERE rn > 1
)
在 SQL Server 中,您可以简单地从 CTE 中删除:
WITH CTE AS (
SELECT ClientID,ROW_NUMBER() OVER (PARTITION BY ClientID ORDER BY Level DESC) AS rn
FROM data
)
DELETE FROM CTE
WHERE rn > 1
在 MySQL
DELETE FROM data
WHERE (ClientID,Level) NOT IN (
SELECT ClientID,MAX(Level)
FROM (SELECT * FROM data) d
GROUP BY ClientID
)
,
您可以按如下方式使用 exists
:
Delete from your_table t
Where exists
(Select 1 from your_table tt
Where tt.client_id = t.client_id and tt.level > t.level)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。