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

Oracle中筛选无历史记录ID数据的SQL查询问题

解决Oracle中筛选无历史记录数据的问题

需要从data_set表中筛选出无历史记录的ID对应的记录,排除存在历史记录的ID(如37798411、74368539)。你原有的SQL仅通过记录数判断,逻辑存在局限,以下是两种可行的修正方案:

方案一:精准排除存在历史记录的ID

基于业务中“有历史记录即存在end_date非空的记录”的定义,直接排除这类ID:

SELECT *
FROM data_set ds
WHERE NOT EXISTS (
    SELECT 1
    FROM data_set ds_hist
    WHERE ds_hist.id = ds.id
    AND ds_hist.end_date IS NOT NULL
)

该查询会过滤掉所有存在历史版本的ID,仅保留没有任何历史记录的ID对应的所有记录。

方案二:结合记录数与当前有效状态筛选

如果确认无历史记录的ID仅存在一条当前有效记录(end_date为空),可以在原SQL基础上增加状态过滤:

SELECT *
FROM data_set
WHERE id IN (
    SELECT id
    FROM data_set
    GROUP BY id
    HAVING COUNT(*) = 1
)
AND end_date IS NULL

此方案既保证ID只有一条记录,又确保该记录是当前有效状态,避免误选仅存历史记录的ID。

两种方案均能从你提供的输入数据中得到期望输出:

ID           Start_date                    End_date
------------------------------------------------------------
83851566    2023-09-21 00:00:00.000 
83849576    2023-09-21 00:00:00.000 
84042557    2023-09-21 00:00:00.000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:25:06