优化SQL Server中基于FrameLossCount保留最大值的ElementID1去重查询
简洁的SQL Server去重方案(保留FrameLossCount最大值行)
方案1:DELETE + 子查询(最简洁直观)
如果每个ElementID1对应的最大FrameLossCount是唯一值,直接用子查询定位需要删除的行:
DELETE t FROM YourTable t WHERE FrameLossCount < ( SELECT MAX(FrameLossCount) FROM YourTable WHERE ElementID1 = t.ElementID1 );
逻辑:对表中每一行,判断其FrameLossCount是否小于同ElementID1分组下的最大值,若是则删除该行。
方案2:处理同ElementID1存在多个最大值行的场景
如果同一个ElementID1下有多个行的FrameLossCount都是最大值,且你只需要保留其中任意一行,可以用简化的窗口函数写法:
WITH cte AS (SELECT *,ROW_NUMBER()OVER(PARTITION BY ElementID1 ORDER BY FrameLossCount DESC)rn FROM YourTable) DELETE cte WHERE rn>1;
这个写法在保持CTE清晰性的同时,压缩了代码结构,比常规多行CTE更紧凑。
注意事项
- 执行删除操作前,务必将
DELETE替换为SELECT *,先验证待删除的行是否符合预期 - 如果表中有主键/唯一标识列,建议在条件中加入该列,避免因
FrameLossCount重复导致误删
内容的提问来源于stack exchange,提问作者user2019455
相关产品推荐
相关产品推荐

