如何基于NEXT_COMPOSITION列实现分段递增的序列列?
实现需求的SQL方案
你需要的是基于NEXT_COMPOSITION列的标记生成分组序列,核心思路是用累计求和窗口函数实现,以下是具体方案:
前提说明
SQL表本身是无序的,必须指定一个能确定行顺序的列(比如自增ID、时间戳等,下文用id作为示例排序列,请替换为你实际的排序列)。
实现代码
SELECT *, -- 计算累计的1的数量,再加1得到目标序列 SUM(CASE WHEN NEXT_COMPOSITION = 1 THEN 1 ELSE 0 END) OVER (ORDER BY id ROWS UNBOUNDED PRECEDING) + 1 AS sequence_col FROM your_table; -- 替换为你的表名
原理解释
- 先用
CASE语句把NEXT_COMPOSITION等于1的行标记为1,其他行(包括null)标记为0; - 用
SUM() OVER (...)窗口函数计算从第一行到当前行的标记累计和,这个值代表当前行之前(含当前)遇到的1的总次数; - 累计和加1后,正好满足:起始值为1,每遇到一个1序列递增1,后续行保持当前序列值直到下一个1出现。
内容的提问来源于stack exchange,提问作者user2164804
相关产品推荐
相关产品推荐

