如何在 SQL 服务器查询中重置 sum() over ()?

How do I reset a sum() over () in a SQL Server query?

我有一个派生的 table 看起来像这个例子:

{select * 来自 tb_data}

我希望结果具有额外的求和列,问题是如果信息列值 = 'reset'

,我需要求和列来重置工作值

{select *,(我假设 sum(number) over (partition by id order by date desc) 是 tb_data}

的总和

输出应该是这样的:

实际派生的table涵盖了数千个id,这就是为什么它需要按id分区并按date desc排序并且每个都有不同数量的重置点。

什么 SQL 查询会得到我需要的输出?

您可以先进行条件 window 求和来定义组:每次发现重置时,都会启动一个新组。然后你可以简单地在组内做 window 和 numbers 的总和。

select 
    id,
    date,
    info,
    number,
    sum(number) over(partition by id, grp order by date) summation
from (
    select
        t.*,
        sum(case when info = 'reset' then 1 else 0 end) 
            over(partition by id order by date) grp
    from mytable t
) t