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

按eventid分区逐行递增seid字段值的SQL实现求助

问题

我有一张包含eventid、seid、rowNo字段的数据表,需要按eventid分区,每行的seid值基于分区内前一行的值递增1(分区首行保留原seid值)。我尝试用LAG窗口函数写了SQL,但没得到预期结果,请求解决。

现有数据表

eventidseidrowNo
90025321
90025302
90025303
90025304
942484695
94248406
94248409

期望输出表

eventidseidrowNo
90025321
90025332
90025343
90025354
942484695
942484706
942484719

尝试的SQL语句

select eventname, eventid, subeventid,max_seid,seid, rn,
       LAG (seid, 1, 1) OVER ( partition by eventid order by eventname ) as realseid
from newtest
解决方案

你之前用LAG函数的思路无法实现需求——LAG仅能获取前一行的原始值,没法完成递增加1的累积计算。正确的做法是结合FIRST_VALUE和ROW_NUMBER窗口函数来实现:

SELECT 
    eventid,
    -- 分区首行seid + 行号偏移量(行号从0开始)
    FIRST_VALUE(seid) OVER (PARTITION BY eventid ORDER BY rowNo) 
    + ROW_NUMBER() OVER (PARTITION BY eventid ORDER BY rowNo) - 1 AS seid,
    rowNo
FROM 你的数据表名
ORDER BY rowNo;

逻辑说明

  1. FIRST_VALUE(seid) OVER (PARTITION BY eventid ORDER BY rowNo):获取每个eventid分区内的第一个seid值(即分区首行的原始值)。
  2. ROW_NUMBER() OVER (PARTITION BY eventid ORDER BY rowNo):在每个分区内按rowNo排序生成行号,首行是1,后续依次递增。
  3. 用首行seid加上(行号-1),即可实现首行保持原值、后续每行递增1的效果。

注意事项

  • 将SQL中的你的数据表名替换为实际表名。
  • 你尝试的SQL中出现了eventname、subeventid等未在数据表中列出的字段,需根据实际业务需求调整查询的字段列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:35:30