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

Databricks SQL:基于唯一值用LAG函数实现指定列计算需求

解决方案:替换number=8的行值为最近非8值加1

你的问题出在单纯使用LAG(number)只会取紧邻的前一行值,如果前一行也是8,就会得到错误的计算结果。要实现“取前一个非8的number值加1”的逻辑,需要在窗口函数中追踪每个id分组内最近的非8值,而非仅前一行值。

以下是符合要求的CASE语句实现:

SELECT 
    id,
    number,
    CASE 
        WHEN number = 8 
        THEN MAX(CASE WHEN number != 8 THEN number END) OVER (
            PARTITION BY id 
            ORDER BY number 
            ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
        ) + 1
        ELSE number
    END AS value_needed
FROM your_table;

代码说明:

  • MAX(CASE WHEN number != 8 THEN number END) OVER (...):在每个id分组内,筛选出当前行之前的所有非8值,通过MAX获取其中最后出现的那个值(即最近的非8值)。
  • ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING:限定窗口范围为分组起始行到当前行的前一行,确保只参考当前行之前的数据。
  • 若需要让所有number=8的行value_needed统一为3,只需保证每个id分组内最近的非8值为2,这段代码会自动计算出3。

注意:如果你的数据排序逻辑不是基于number列(比如按行的插入顺序),请将ORDER BY number替换为对应的排序字段,确保能正确追踪到前一个非8的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:16:03