单条SELECT查询按规则去重:列1重复时取列2尾缀10的行
符合要求的去重查询实现
假设你的源表名为 source_table,可直接使用以下单SELECT查询实现需求,所有筛选逻辑都写在WHERE子句中,未使用DISTINCT ON或临时表,适配绝大多数支持标准SQL的数据库:
SELECT * FROM source_table t1 WHERE -- Column1存在重复值时,仅保留Column2以10结尾的行 (t1."Column 2" LIKE '%10' AND EXISTS ( SELECT 1 FROM source_table t2 WHERE t2."Column 1" = t1."Column 1" GROUP BY t2."Column 1" HAVING COUNT(*) > 1 )) -- Column1无重复值时,直接保留对应行 OR NOT EXISTS ( SELECT 1 FROM source_table t2 WHERE t2."Column 1" = t1."Column 1" GROUP BY t2."Column 1" HAVING COUNT(*) > 1 )
逻辑说明
- 通过关联子查询判断当前行的
Column 1是否存在重复值:相同Column 1分组后计数大于1即判定为重复 - 对存在重复的分组,仅筛选
Column 2后缀为10的行 - 对无重复的分组,直接保留所有对应行
- 不会过滤掉其他列的差异值,完全符合你的约束要求
内容的提问来源于stack exchange,提问作者Sneha Nadar
相关产品推荐
相关产品推荐

