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

如何基于TFvalue列值为面板数据按ID生成序列分组编号

实现方案

你需要的是按ID分组后,统计当前行之前出现过的TFvalue=1的次数,累加后加1就是目标分组编号,用累计求和窗口函数即可实现,标准SQL写法如下:

SELECT 
    ID,
    TFvalue,
    Date,
    -- 统计当前行之前同ID下TFvalue=1的数量,加1得到分组号
    COALESCE(
        SUM(CASE WHEN TFvalue = 1 THEN 1 ELSE 0 END) OVER (
            PARTITION BY ID 
            ORDER BY Date 
            ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
        ), 0
    ) + 1 AS GroupNum
FROM 你的表名
ORDER BY ID, Date;

逻辑说明

  • PARTITION BY ID 保证分组逻辑只在同一个ID内部生效
  • ORDER BY Date 保证按时间顺序统计
  • 窗口函数的求和范围ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING指定只统计当前行之前的所有行,不包含当前行
  • COALESCE 处理每个ID第一行没有前置行的场景,空值补0
  • 统计到的前置1的数量加1,就得到从1开始递增的分组编号

为什么DENSE_RANK不适用

DENSE_RANK是基于字段值的排序结果分组,而你的需求是事件驱动的序列分组(每出现一次TFvalue=1就触发分组编号+1),不属于按值排序的分组场景,所以无法直接用排名函数实现。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:54:01