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

Oracle查询:按ID获取首次出现的日期记录

Oracle SQL:获取每个ID的首次出现记录

示例表数据

NameIDDATE
Shane101JAN2023
Angie202JAN2023
Shane102JAN2023
Austin303JAN2023
Shane103JAN2023
Angie203JAN2023
Tony405JAN2023

预期输出

NameIDDATE
Shane101JAN2023
Angie202JAN2023
Austin303JAN2023
Tony405JAN2023

解决方案

以下是几种在Oracle中实现需求的SQL写法:

方法1:分组聚合+关联查询

通过分组ID找到每个ID的最早日期,再关联原表获取对应Name(适用于同一ID对应唯一Name的场景):

SELECT t.Name, t.ID, t.DATE
FROM your_table t
INNER JOIN (
    SELECT ID, MIN(DATE) AS min_date
    FROM your_table
    GROUP BY ID
) t_min ON t.ID = t_min.ID AND t.DATE = t_min.min_date;

方法2:窗口函数ROW_NUMBER()

利用窗口函数对每个ID的记录按日期排序,筛选出排名第一的条目:

SELECT Name, ID, DATE
FROM (
    SELECT 
        Name, 
        ID, 
        DATE,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY DATE ASC) AS rn
    FROM your_table
)
WHERE rn = 1;

若同一ID在最早日期存在多条记录,且需要保留所有这类记录,可将ROW_NUMBER()替换为RANK()或DENSE_RANK()。

方法3:Oracle特有的KEEP子句

通过KEEP子句直接在聚合查询中获取最早日期对应的Name:

SELECT 
    ID,
    MIN(Name) KEEP (DENSE_RANK FIRST ORDER BY DATE ASC) AS Name,
    MIN(DATE) AS DATE
FROM your_table
GROUP BY ID;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:30:58