如何解决基于先前值的SQL动态更新
我正在尝试探索动态更新。
我的实际源表是:
更新后源表的预期结果:
我尝试过的查询:
WITH t AS
(
SELECT key,Begin_POS,Length,(Begin_POS+ Length) as res
from tab
)
SELECT src_column_id,res,COALESCE(Length + lag(res) OVER (ORDER BY src_column_id),1) AS PRE_VS
from t
您能协助我采取什么样的方法吗?
解决方法
我认为这是一个窗口总和:
select
t.*,1 + coalesce(
sum(length) over(
order by key
rows between unbounded preceding and 1 preceding
),0
) new_begin_pos
from mytable t
,
您可以像这样使用SUM()
窗口函数:
select
[key],sum(length) over (order by [key]) - length + begin_pos begin_pos,length
from tab
如果要更新表:
with cte as (
select *,sum(length) over (order by [key]) - length + begin_pos new_begin_pos
from tab
)
update cte
set begin_pos = new_begin_pos
请参见demo。
结果:
> key | begin_pos | length
> --: | --------: | -----:
> 1 | 1 | 1
> 2 | 2 | 9
> 3 | 11 | 3
> 4 | 14 | 7
> 5 | 21 | 3
> 6 | 24 | 6
> 7 | 30 | 16
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。