You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL如何排除查询结果中INSTANCE和LOGNUMBER相同的多行数据

Oracle SQL成对重复行过滤方案

核心逻辑是统计INSTANCE和LOGNUMBER组合的出现次数,仅保留出现次数为1的组合对应的行即可,完全不需要依赖DATAFLAG字段判断,不会漏删匹配行。


实现1:窗口分析函数(推荐,性能最优)

仅扫描一次全表,适合大数据量场景:

SELECT SEQUENCE, INSTANCE, NAME, LOGNUMBER, DATAFLAG
FROM (
    SELECT 
        t.*,
        COUNT(*) OVER(PARTITION BY INSTANCE, LOGNUMBER) AS group_cnt
    FROM datatable t
)
WHERE group_cnt = 1
ORDER BY SEQUENCE;

逻辑说明

  • 用COUNT(*) OVER(PARTITION BY INSTANCE, LOGNUMBER)统计每个(INSTANCE, LOGNUMBER)组合的行数
  • 成对的组合行数为2,会被WHERE group_cnt = 1过滤,仅保留无匹配的独立行
  • 最终输出和你要求的期望结果完全一致

实现2:EXISTS子查询写法

适合习惯用关联逻辑的场景:

SELECT t1.*
FROM datatable t1
WHERE NOT EXISTS (
    SELECT 1
    FROM datatable t2
    WHERE 
        t2.INSTANCE = t1.INSTANCE
        AND t2.LOGNUMBER = t1.LOGNUMBER
        AND t2.SEQUENCE != t1.SEQUENCE
)
ORDER BY t1.SEQUENCE;

逻辑说明

  • 逐行判断是否存在同INSTANCE、同LOGNUMBER的其他行
  • 不存在匹配行的记录才会被保留,过滤效果和第一种写法完全一致

内容的提问来源于stack exchange,提问作者Kowl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 14:06:03