sql - 删除重复项,保留其中一个,分组
问题描述
对于每个表 ID,我需要删除所有重复项,但只有一个。像下面这样。我需要删除 valueid 上 01,02,03 的所有重复项...
原来的:
id | valueid | data
____________________________
01 | 1001 | datadata1
01 | 1002 | datadata2
01 | 1001 | datadata1
02 | 1323 | datamoredata123
02 | 1323 | datamoredata123
03 | 22123 | evenmoredata
03 | 24444 | andalsomore
应该像这样结束:
id | valueid | data
____________________________
01 | 1001 | datadata1
01 | 1002 | datadata2
02 | 1323 | datamoredata123
03 | 22123 | evenmoredata
03 | 24444 | andalsomore
试图用这样的东西来做,但我不明白如何在 id 上对删除进行分组
WITH CTE AS(
SELECT valueid,
RN = ROW_NUMBER()OVER(PARTITION BY valueid ORDER BY valueid)
FROM tblvalues
)
DELETE FROM CTE WHERE RN > 1
有什么建议么?
提前致谢
解决方案
您需要将id
列添加到PARTITION
:
WITH CTE AS(
SELECT valueid,
RN = ROW_NUMBER()OVER( PARTITION BY id, valueid ORDER BY data)
FROM tblvalues
)
DELETE FROM CTE WHERE RN > 1
这样,您可以valueid
分别删除每个id
. 列data
确定删除哪些重复项。
推荐阅读
- python - 如何使用 Fernet 加密对字符串变量进行加密
- ios - 通过添加/减去本地偏移量来计算日期时间 [将任何日期时间转换为 UTC 时间格式]
- javascript - Google Charts - 更改可点击标签 ColumnChart 中列的颜色
- objective-c - UIViewController - iPad Pro 3rd 顶部和底部的神秘空白
- c# - glyphicon 不超过一页 asp.net webform
- javascript - 加载javascript时如何修复我的webview崩溃
- python - 求解不可行的不等式系统
- linux - Yocto - Linux 映像生成 - 删除 qemu 支持
- java - 如何使用 if 语句检查布尔值
- ruby-on-rails - 如何在haml中将三元运算符用于复选框?