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

SQL如何取最近flag='n'行的col1值填充flag='y'的行?

问题原因

你之前使用的LAG(col1,1)只能获取相邻上一行的col1值,遇到连续多条flag='y'的场景时,第二条及之后的y行就会取到上一条y行的col1值,和你要取最近一条n行col1的需求不符。

实现方案

我们可以通过分组标记+组内取值的逻辑实现需求,步骤如下:

  1. 先按ID分区、date升序排序,生成分组序号:每遇到一次flag='n',分组序号就+1,这样同一条n后面的所有连续y都会和这条n分到同一个组
  2. 在每个分组内,提取唯一一条flag='n'行的col1值,作为组内所有行的col1_new即可
完整SQL代码
SELECT 
    ID, 
    col1, 
    flag, 
    date,
    MAX(CASE WHEN flag = 'n' THEN col1 END) OVER (PARTITION BY ID, group_id) AS col1_new
FROM (
    SELECT 
        *,
        -- 生成分组序号,每遇到一个n就新增一个分组
        SUM(CASE WHEN flag = 'n' THEN 1 ELSE 0 END) OVER (
            PARTITION BY ID 
            ORDER BY date 
            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        ) AS group_id
    FROM my_table
) t
逻辑验证

以你举的示例为例:

  • 第4行flag为n,生成的group_id为N,第5、6行flag为y,group_id也为N,组内取到的col1就是第4行的col1
  • 第9行flag为n,生成的group_id为N+1,第10、11行flag为y,group_id也为N+1,组内取到的col1就是第9行的col1
    完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:15:04