带重置的运行总计/计数

问题描述 投票:0回答:1

我目前需要进行查询,根据特定状态为用户表创建运行总计,并在状态更改后重置。我已经完成了通常的运行总计脚本,但我的问题在于我不确定一旦他们回到那个特定状态,如何让计数再次从 1 开始。
这是我现在拥有的桌子:

用户 状态 日期 Status_desc
用户 1 工作 03-01-2023 1
用户 1 工作 02-01-2023 1
用户 1 缺席 01-01-2023 0
用户 1 工作 12-01-2022 1
用户 1 工作 11-01-2022 1
用户 1 工作 11-01-2022 1
用户 2 工作 03-01-2023 1
用户 2 缺席 02-01-2023 0
用户 2 缺席 01-01-2023 0
用户 2 工作 12-01-2022 1
用户 2 工作 11-01-2022 1
用户 2 工作 11-01-2022 1

这是我试图获得的总计结果:

用户 状态 日期 Status_desc Running_total
用户 1 工作 03-01-2023 1 2
用户 1 工作 02-01-2023 1 1
用户 1 缺席 01-01-2023 0 0
用户 1 工作 12-01-2022 1 3
用户 1 工作 11-01-2022 1 2
用户 1 工作 11-01-2022 1 1
用户 2 工作 03-01-2023 1 1
用户 2 缺席 02-01-2023 0 0
用户 2 缺席 01-01-2023 0 0
用户 2 工作 12-01-2022 1 3
用户 2 工作 11-01-2022 1 2
用户 2 工作 11-01-2022 1 1

我试过正常运行的total window function,没用,因为我的partition是status。有什么解决方法吗?

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
sql reset running-count
1个回答
0
投票
with data as (
    select *.
        count(case when Status = 'Absent' then 1 end) over (partition by User order by Date) as grp
    from T
)
select *,
    count(case when Status <> 'Absent' then 1 end) over (partition by User, grp order by Date) as RunningTotal
from data
order by User, Date desc;
© www.soinside.com 2019 - 2024. All rights reserved.