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

如何在Kusto中基于条件计算列的累积和,状态为0时计数重置

状态1累计计数实现方案

需求规则

  • 按UserId分组计算状态为1的累计天数
  • 遇到状态为0时累计值清零,后续再次出现状态1时重新从1开始计数
  • 无需校验日期连续性,同用户下只要未遇到状态0就持续累加状态1的计数

输入样例

UserId | Day        | Status|
A      |2021-09-16  | 1     |
A      |2021-09-17  | 1     |
A      |2021-09-18  | 1     |
A      |2021-09-19  | 1     |
A      |2021-09-20  | 0     |
A      |2021-09-21  | 1     |
B      |2021-09-16  | 1     |
B      |2021-09-17  | 1     |
B      |2021-09-20  | 1     |
B      |2021-09-21  | 0     |

实现代码

SQL版本(支持Hive/Spark SQL/MySQL 8.0及以上版本)

核心逻辑是用状态0的出现次数给同组的状态1打分组标记,再按分组累加计数:

WITH mark_group AS (
    SELECT 
        UserId,
        Day,
        Status,
        -- 同用户下按日期排序,每遇到一次状态0就给分组标记+1,状态0之后的1会被归为同一组
        SUM(CASE WHEN Status = 0 THEN 1 ELSE 0 END) OVER(PARTITION BY UserId ORDER BY Day) AS group_id
    FROM 你的数据表名
)
SELECT 
    UserId,
    Day,
    Status,
    CASE 
        WHEN Status = 0 THEN 0
        -- 同用户同组内的状态1按日期排序累加计数
        ELSE ROW_NUMBER() OVER(PARTITION BY UserId, group_id, Status ORDER BY Day)
    END AS Cum_Sum
FROM mark_group
ORDER BY UserId, Day;

Python Pandas版本

import pandas as pd

# 读入源数据到DataFrame,示例读入代码可根据实际存储调整
# df = pd.read_csv('你的数据文件路径')

# 打分组标记
df['group_id'] = df.groupby('UserId')['Status'].apply(lambda x: (x == 0).cumsum())
# 同组内计数
df['Cum_Sum'] = df.groupby(['UserId', 'group_id', 'Status']).cumcount() + 1
# 状态为0的行计数置为0
df.loc[df['Status'] == 0, 'Cum_Sum'] = 0

输出结果

UserId | Day        | Status| Cum_Sum |
A      |2021-09-16  | 1     | 1       |
A      |2021-09-17  | 1     | 2       |
A      |2021-09-18  | 1     | 3       |
A      |2021-09-19  | 1     | 4       |
A      |2021-09-20  | 0     | 0       |
A      |2021-09-21  | 1     | 1       |
B      |2021-09-16  | 1     | 1       |
B      |2021-09-17  | 1     | 2       |
B      |2021-09-20  | 1     | 3       |
B      |2021-09-21  | 0     | 0       |

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:24:00