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

SQL如何匹配字母列重复值调整set_id生成统一alt_set_id?

解法

你需要的逻辑可以通过标准的窗口函数实现,无需游标,性能远高于逐行判断的方案,SQL如下:

WITH letter_grp AS (
    SELECT 
        *,
        -- 标记当前行是否为新连续字母分组的起点
        CASE WHEN LAG(letter) OVER(ORDER BY row_id) != letter 
            OR LAG(letter) OVER(ORDER BY row_id) IS NULL 
        THEN 1 ELSE 0 END AS new_grp_flag
    FROM sort_test
),
grp_id AS (
    SELECT
        *,
        -- 累加标记生成连续分组的唯一ID
        SUM(new_grp_flag) OVER(ORDER BY row_id ROWS UNBOUNDED PRECEDING) AS group_id
    FROM letter_grp
)
SELECT 
    row_id,
    set_id,
    letter,
    -- 取每个分组首次出现的set_id作为alt_set_id
    MIN(set_id) OVER(PARTITION BY group_id) AS alt_set_id
FROM grp_id
ORDER BY row_id;

逻辑说明

  • 第一步用LAG函数获取上一行的letter值,识别连续相同letter的分组起点
  • 第二步对分组起点标记做累加,给每个连续相同letter的分组分配唯一分组ID
  • 第三步按分组ID取每组最小的set_id(即分组第一行的set_id)作为整组的alt_set_id

上述SQL执行结果和你给出的期望输出完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 11:45:02