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

如何在SQL的Row_Number函数中跳过每第100个序号?

生成跳过每100倍数的自动递增序列

问题分析

你需要的序列是跳过所有100的倍数(100、200、300...),即序列为1-99、101-199、201-299……之前用rownum() over (partition by column_name)+1的方法会给所有行统一加1,无法实现精准跳过指定数字的效果,核心是需要根据行号的区间动态计算偏移量。

解决方案

使用row_number()(分区场景下必须用这个,而非全局的rownum)结合数学计算实现动态偏移,公式逻辑是:基础行号 + 每99行增加1的偏移量,刚好跳过每一个整百数。

完整SQL示例

SELECT
    your_partition_column,
    -- 生成自定义序列
    row_number() OVER (
        PARTITION BY your_partition_column 
        ORDER BY your_sort_column -- 必须指定排序字段保证序列稳定
    ) + 
    FLOOR(
        (row_number() OVER (
            PARTITION BY your_partition_column 
            ORDER BY your_sort_column
        ) - 1) / 99
    ) AS custom_sequence,
    -- 其他需要查询的字段
    your_other_columns
FROM your_table;

逻辑解释

  1. 基础行号生成:row_number() OVER (PARTITION BY ... ORDER BY ...)在每个分区内生成从1开始的连续序号,保证序列的有序性和分区独立性。
  2. 偏移量计算:FLOOR((rn - 1)/99)的作用是:
    • 当行号rn在1-99区间时,(rn-1)/99结果为0-0.989,取整后为0,偏移量为0,序列就是1-99
    • 当行号rn在100-198区间时,(rn-1)/99结果为1-1.989,取整后为1,偏移量为1,序列变为100+1=101到198+1=199(跳过100)
    • 当行号rn在199-297区间时,(rn-1)/99结果为2-2.989,取整后为2,偏移量为2,序列变为199+2=201到297+2=299(跳过200)
    • 以此类推,完美匹配你需要的序列规则。

验证示例

行号(rn)偏移量最终序列值
101
99099
1001101
1981199
1992201
2972299

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:15:30