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

如何创建含重复值的ROW_NUMBER列?SQL实现问询

解决方案:生成随布尔值动态变化的连续序号

要实现当column_bool为TRUE时生成连续序列号,为FALSE时复用前一行序号的需求,可以通过累计求和分组的方式实现,核心思路是先标记出所有需要递增序号的行,再通过窗口函数累计这些标记,自动为FALSE行继承前序序号。

正确SQL实现

SELECT 
    column_id,
    column_bool,
    SUM(CASE WHEN column_bool THEN 1 ELSE 0 END) OVER (ORDER BY column_id) AS dynamic_id
FROM t1
ORDER BY column_id;

执行结果验证

针对你的测试表,执行后会得到如下符合预期的结果:

column_idcolumn_booldynamic_id
1true1
2true2
3false2
4true3
5true4
6true5
7false5
8true6

逻辑说明

  1. 标记递增触发行:用CASE WHEN column_bool THEN 1 ELSE 0 END将TRUE行标记为1,FALSE行标记为0。
  2. 累计求和生成序号:通过SUM() OVER (ORDER BY column_id)按column_id顺序累计这些标记值。每当遇到TRUE行,累计值加1;遇到FALSE行,累计值保持不变,自然继承了前一行的序号。

原代码问题分析

你之前的代码使用PARTITION BY column_bool会把TRUE和FALSE行分成两个独立分组,导致FALSE行的序号是单独计数后减1,无法关联到前一行的正确序号,所以不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:02:04