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

如何实现状态变更时重置的Running Total(累计计数)?

问题

需要编写SQL查询,为用户表生成基于特定状态的累计计数(Running Total),当用户状态发生变更时,累计计数需重置。常规累计计数脚本无法实现用户回到目标状态时计数从1重新开始的需求。

当前用户表结构及数据

用户状态日期状态描述
用户1在岗03-01-20231
用户1在岗02-01-20231
用户1缺勤01-01-20230
用户1在岗12-01-20221
用户1在岗11-01-20221
用户1在岗11-01-20221
用户2在岗03-01-20231
用户2缺勤02-01-20230
用户2缺勤01-01-20230
用户2在岗12-01-20221
用户2在岗11-01-20221
用户2在岗11-01-20221

期望结果

用户状态日期状态描述累计计数
用户1在岗03-01-202312
用户1在岗02-01-202311
用户1缺勤01-01-202300
用户1在岗12-01-202213
用户1在岗11-01-202212
用户1在岗11-01-202211
用户2在岗03-01-202311
用户2缺勤02-01-202300
用户2缺勤01-01-202300
用户2在岗12-01-202213
用户2在岗11-01-202212
用户2在岗11-01-202211

尝试的无效代码

select *
    , sum(t0.working_flag)
    OVER (PARTITION BY (t0.status_desc)
         ORDER BY t0.date asc)
from (select *
    , case when status_desc = 'working' then '1'
    else 0
    end as working_flag
from table) t0
order by date desc

解决方案

核心思路是为每个用户的连续同状态区间生成唯一分组标识,再基于该分组计算累计值,状态变更时分组ID更新,实现计数重置。

完整SQL代码

WITH user_status_change AS (
    SELECT 
        `用户`,
        `状态`,
        `日期`,
        `状态描述`,
        -- 标记当前行与上一行状态是否发生变更
        CASE 
            WHEN LAG(`状态描述`) OVER (PARTITION BY `用户` ORDER BY `日期` ASC) != `状态描述` 
            THEN 1 
            ELSE 0 
        END AS status_change_flag
    FROM your_table_name  -- 替换为实际表名
),
status_groups AS (
    SELECT 
        *,
        -- 累计变更标记,生成连续状态的分组ID
        SUM(status_change_flag) OVER (PARTITION BY `用户` ORDER BY `日期` ASC) AS group_id
    FROM user_status_change
)
SELECT 
    `用户`,
    `状态`,
    `日期`,
    `状态描述`,
    -- 仅对在岗状态计算分组内累计,缺勤状态返回0
    CASE 
        WHEN `状态描述` = 1 
        THEN ROW_NUMBER() OVER (PARTITION BY `用户`, group_id ORDER BY `日期` ASC)
        ELSE 0 
    END AS 累计计数
FROM status_groups
ORDER BY `用户`, `日期` DESC;

代码说明

  1. user_status_change CTE:通过LAG函数获取当前用户上一行的状态,对比后标记状态变更点。
  2. status_groups CTE:对每个用户的变更点进行累加,同一个连续状态区间的行将获得相同的group_id。
  3. 最终查询:针对每个用户的连续在岗分组,用ROW_NUMBER()生成从1开始的累计计数;缺勤状态直接返回0,最后按用户和日期倒序排列,匹配期望结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:20:00