SUMIF 然后重新开始计数
SUMIF then restart count
我如何做一个 SUMIF 函数,以便它在另一列中的值为 "False" 时累加值,但当它达到 "True" 的值时,它会重新开始计数重来一次,但包括 SUM 计算中遇到的第一个 "True" 的值?我也想要它,以便它按时间顺序累加值。
我做了一些研究,我认为我需要使用一个过度分区并制作一个行号列来调用所有行号 =“1”,但我不确定该怎么做。
编辑:Sum 还应该包括它遇到的第一个 "true" 值的 "distance" 值
编辑 2:最终,我试图计算在警报被触发到 "True" 之前每辆车行驶的平均距离,这意味着它需要被带到商店进行修复。也许有比我最初想的更好的方法来做到这一点?
抱歉措辞不佳...
你认为可以使用 SUM 分析函数是对的。这样的事情会为你做累计和。
要在警报为 True 时重新启动 SUM,请在分区 window 中包含 Alter 并按日期排序以实现订单。
SELECT SUM(CASE WHEN alert = 'FALSE' THEN distance ELSE 0 END) OVER(PARTITIION BY alert order by date) cumm_sum,
date, alert
FROM Table
您要定义群组。听起来您希望定义为 "trues" 的数量,直到并包括给定的行。然后,您可以在每个组内进行累加和。所以:
select t.*,
sum(distance) over (partition by vehicleid, grp
order by date
rows between unbounded preceding and current row
)
from (select t.*,
sum(case when alert = 'True' then 1 else 0 end) over
(partition by vehicleid
order by date
rows between unbounded preceding and current row
) as grp
from t
) t;
Here 是一个 db<>fiddle,说明此代码有效。
我如何做一个 SUMIF 函数,以便它在另一列中的值为 "False" 时累加值,但当它达到 "True" 的值时,它会重新开始计数重来一次,但包括 SUM 计算中遇到的第一个 "True" 的值?我也想要它,以便它按时间顺序累加值。
我做了一些研究,我认为我需要使用一个过度分区并制作一个行号列来调用所有行号 =“1”,但我不确定该怎么做。
编辑:Sum 还应该包括它遇到的第一个 "true" 值的 "distance" 值
编辑 2:最终,我试图计算在警报被触发到 "True" 之前每辆车行驶的平均距离,这意味着它需要被带到商店进行修复。也许有比我最初想的更好的方法来做到这一点?
抱歉措辞不佳...
你认为可以使用 SUM 分析函数是对的。这样的事情会为你做累计和。 要在警报为 True 时重新启动 SUM,请在分区 window 中包含 Alter 并按日期排序以实现订单。
SELECT SUM(CASE WHEN alert = 'FALSE' THEN distance ELSE 0 END) OVER(PARTITIION BY alert order by date) cumm_sum,
date, alert
FROM Table
您要定义群组。听起来您希望定义为 "trues" 的数量,直到并包括给定的行。然后,您可以在每个组内进行累加和。所以:
select t.*,
sum(distance) over (partition by vehicleid, grp
order by date
rows between unbounded preceding and current row
)
from (select t.*,
sum(case when alert = 'True' then 1 else 0 end) over
(partition by vehicleid
order by date
rows between unbounded preceding and current row
) as grp
from t
) t;
Here 是一个 db<>fiddle,说明此代码有效。