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

如何为每个id标记数据表中的首行与末行

问题描述

我有如下数据表:

idRANK
1111
1112
1113
2221
2222

希望添加两列first和last,标记该行是否为对应id的首行/末行,期望结果如下:

idfirstlast
111YESNO
111NONO
111NOYES
222YESNO
222NOYES
解决方案

可以用SQL窗口函数实现,通过分组内的行号和总行数判断首末行:

SELECT 
    id,
    CASE WHEN ROW_NUMBER() OVER(PARTITION BY id ORDER BY RANK) = 1 THEN 'YES' ELSE 'NO' END AS first,
    CASE WHEN ROW_NUMBER() OVER(PARTITION BY id ORDER BY RANK DESC) = 1 THEN 'YES' ELSE 'NO' END AS last
FROM 
    your_table_name
ORDER BY 
    id, RANK;

逻辑说明:

  • PARTITION BY id:按id拆分数据组,单独处理每个id下的行
  • ROW_NUMBER() OVER(...):在分组内按RANK正序生成行号,行号为1的就是首行;按RANK倒序生成行号,行号为1的就是末行
  • CASE语句将判断结果转为YES/NO标记

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:25:37