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

如何使用Oracle SQL获取FAMILY列中3个指定值的首行数据?

获取指定FAMILY的首行数据

SQL里的表本身没有固定的行顺序,所以得先明确“首行”的判定规则——比如按创建时间最早、ID最小/最大等。下面以取每个指定FAMILY的最早创建日期对应的行为例,给出两种实现方法,你可以根据需求调整排序规则。

方法一:用窗口函数ROW_NUMBER()(推荐,灵活可控)

这是最通用的写法,能精准控制每个组只返回一行:

SELECT ID, FAMILY, ENV_XML_PATH, CREATED_DATE
FROM (
    SELECT 
        *,
        -- 按FAMILY分组,组内按创建日期升序排,给每行标序号
        ROW_NUMBER() OVER (PARTITION BY FAMILY ORDER BY CREATED_DATE ASC) AS row_num
    FROM your_table_name  -- 替换成你的实际表名
    WHERE FAMILY IN ('CRM', 'SCM', 'IC')  -- 筛选指定的FAMILY值
) ranked_data
WHERE row_num = 1;  -- 只取每个组的第一行

调整规则:

  • 如果要按ID最小的行作为“首行”,把ORDER BY CREATED_DATE ASC改成ORDER BY ID ASC
  • 如果要最新创建的行,改成ORDER BY CREATED_DATE DESC

方法二:用子查询+关联查询

适合理解基础SQL逻辑的场景:

SELECT t1.ID, t1.FAMILY, t1.ENV_XML_PATH, t1.CREATED_DATE
FROM your_table_name t1
JOIN (
    -- 先找出每个指定FAMILY的最早创建日期
    SELECT FAMILY, MIN(CREATED_DATE) AS earliest_date
    FROM your_table_name
    WHERE FAMILY IN ('CRM', 'SCM', 'IC')
    GROUP BY FAMILY
) t2 
ON t1.FAMILY = t2.FAMILY AND t1.CREATED_DATE = t2.earliest_date;

注意:如果同一个FAMILY有多个行的创建日期完全相同且都是最早,这个写法会返回所有这些行;如果要确保只返回一行,优先用方法一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:20:31