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

求Databricks SQL查询语句:按规则生成C1列

Databricks SQL 实现分组填充C1列需求

需求描述

在同一ID、COMPANY、DEPT组合的分组内:

  • 当FLAG为F时,C1取该行的INDICATOR值
  • 该C1值需持续填充到下一个FLAG=F的行出现前的所有行

原始数据表

IDCOMPANYDEPTFLAGINDICATOR
1AHRF2
1AHRP3
1AHRM4
1AHRF5
1AHRP6
1AHRM7

期望输出表

IDCOMPANYDEPTFLAGINDICATORC1
1AHRF22
1AHRP32
1AHRM42
1AHRF55
1AHRP65
1AHRM75

解决方案代码

WITH grouped_data AS (
    SELECT 
        ID,
        COMPANY,
        DEPT,
        FLAG,
        INDICATOR,
        -- 累计分组内F的出现次数,生成子分组标识
        SUM(CASE WHEN FLAG = 'F' THEN 1 ELSE 0 END) OVER (
            PARTITION BY ID, COMPANY, DEPT 
            ORDER BY INDICATOR  -- 需根据实际数据的排序逻辑调整,确保行顺序正确
            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        ) AS f_subgroup
    FROM your_table  -- 替换为你的实际表名
)
SELECT 
    ID,
    COMPANY,
    DEPT,
    FLAG,
    INDICATOR,
    -- 在每个子分组中提取F对应的INDICATOR值,填充到所有行
    MAX(CASE WHEN FLAG = 'F' THEN INDICATOR END) OVER (
        PARTITION BY ID, COMPANY, DEPT, f_subgroup
    ) AS C1
FROM grouped_data
ORDER BY ID, COMPANY, DEPT, INDICATOR;

代码说明

  1. 生成子分组:通过SUM窗口函数累计每个分组内到当前行为止FLAG=F的出现次数,将每个F到下一个F之前的行划分为同一个子分组(f_subgroup)。
  2. 填充C1列:在每个子分组内,用MAX函数提取FLAG=F对应的INDICATOR值,由于每个子分组仅存在一行FLAG=F,该值会被填充到子分组内的所有行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:30:33