SQL Server中按ID去重且重复时优先保留IsPopular=1记录的方法
SQL Server 按ID去重实现方案
你可以通过ROW_NUMBER()窗口函数完成需求,SQL语句如下:
WITH RankedRecords AS ( SELECT ID, Type, StoreID, IsPopular, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY IsPopular DESC) AS RowNum FROM 你的实际表名 ) SELECT ID, Type, StoreID, IsPopular FROM RankedRecords WHERE RowNum = 1;
逻辑说明
- 首先用CTE(公共表表达式)对记录按
ID字段分组,同分组内的记录按照IsPopular倒序排序,值为1的记录会排在分组第一位,对应RowNum值为1 - 最终仅过滤取出所有
RowNum=1的记录,就实现了同ID优先保留IsPopular=1的去重效果
直接删除原表重复记录的写法
如果你需要直接清理原表中的重复数据,可使用以下语句:
WITH RankedRecords AS ( SELECT ROW_NUMBER() OVER(PARTITION BY ID ORDER BY IsPopular DESC) AS RowNum FROM 你的实际表名 ) DELETE FROM RankedRecords WHERE RowNum > 1;
补充说明:如果同一个ID存在多条
IsPopular=1的记录,上述写法会随机返回其中一条,若有额外排序规则,可在ORDER BY IsPopular DESC后补充其他排序字段自定义优先级。
内容的提问来源于stack exchange,提问作者Eisen
相关产品推荐
相关产品推荐

