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

Phoenix SQL如何按列A不同取值获取对应列B的首条查询结果

Phoenix SQL 按分组取首条记录实现方案

你需要实现的是按person、account两个字段分组后取每组第一条profile_pic记录,Phoenix有两种常用实现方式,都可以达到预期输出结果:

方案1:窗口函数方案(兼容性最好,Phoenix 4.8+支持)

通过ROW_NUMBER()窗口函数给每个分组内的记录打行号,过滤出行号为1的记录即为首条:

SELECT person, account, profile_pic
FROM (
    SELECT 
        person,
        account,
        profile_pic,
        -- 按person+account分组,组内按你指定的规则排序生成行号
        ROW_NUMBER() OVER (PARTITION BY person, account ORDER BY 排序字段 ASC) AS row_num
    FROM 你的表名
) temp
WHERE row_num = 1;

说明:ORDER BY后替换为你判断首条的排序依据,比如按插入时间最早排序填create_time ASC,按行键顺序排序填ROWKEY ASC。

方案2:DISTINCT ON 方案(写法更简洁)

Phoenix支持类似PostgreSQL的DISTINCT ON语法,直接返回分组后的第一条记录:

SELECT DISTINCT ON (person, account) 
    person, account, profile_pic
FROM 你的表名
-- 必须先按分组字段排序,再按首条判断规则排序
ORDER BY person, account, 排序字段 ASC;

注意事项

  • 必须显式指定排序规则,没有指定排序的情况下“首条”结果是随机不可控的,建议优先使用业务上有明确意义的字段作为排序依据
  • 数据量较大时,建议给person、account和排序字段建立联合索引,可大幅提升查询性能
  • 如果需要取每组最后一条记录,把排序规则改为降序(DESC)即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:57:01