3,497
社区成员
发帖
与我相关
我的任务
分享with tab1 as (
select 1 id, 1 yet, 3 tar, 1000 num from dual union all
select 1 id, 2 yet, 3 tar, 1000 from dual union all
select 1 id, 3 yet, 3 tar, 3000 from dual union all
select 1 id, 4 yet, 3 tar, 3000 from dual union all
select 1 id, 5 yet, 3 tar, 3000 from dual union all
select 1 id, 6 yet, 3 tar, 3000 from dual
)
, tab2 as (
select t1.*,
sum(t1.num) over(partition by id order by yet range between 2 preceding and 2 following) so
from tab1 t1
)
select * from tab2 t1
where t1.yet = t1.tar
;大致给你个思路你看可以么(暂定你的表名为tab1)
1、定义个游标,按name和zjnd聚合
cursor cur1 is select name,zjnd from tab1 group by name,zjnd;
cur1_row cur1%rowtype;
2、开始循环跑逻辑
FOR cur1_row in cur1 loop
SELECT sum(ck) into zck
from tab1 t0
where t0.zjnd = cur1_row.zjnd
and t0.name = cur1_row.name
and t0.ssnd >= cur1_row.zjnd - 3
and t0.ssnd < cur1_row.zjnd + 3
if zck > 10000 then
update tab1 t1
set 更新的字段 = '富有'
WHERE t1.zjnd = cur1_row.zjnd
and t1.name = cur1_row.name
and t1.ssnd >= cur1_row.zjnd - 3
and t1.ssnd < cur1_row.zjnd + 3;
commit;
end if;
end loop