如何用oracle存储过程实现某表中下一条数据的结束时间列日减去1,修改到上一条数据的开始时间列 70
test表有seq列,开始日期begda列结束日期endda列有多条数据现在想把后一条的begda日期减一放到上一条endda真心求教达人怎么做啊...
test表 有seq列,开始日期begda列 结束日期endda列
有多条数据 现在想把后一条的 begda日期减一 放到上一条endda
真心求教达人怎么做啊 展开
有多条数据 现在想把后一条的 begda日期减一 放到上一条endda
真心求教达人怎么做啊 展开
3个回答
展开全部
我好像有碰到过类似的问题,你用我的语句查查试试,是不是这种效果.如果不是,再讨论
select begda,to_date(MIN(begda) over(PARTITION BY t.num ORDER BY t.num
rows BETWEEN 1 following AND 2 following),'yyyy-mm-dd')-1 from (
select 1 num,begda,endda from test )t
select begda,to_date(MIN(begda) over(PARTITION BY t.num ORDER BY t.num
rows BETWEEN 1 following AND 2 following),'yyyy-mm-dd')-1 from (
select 1 num,begda,endda from test )t
更多追问追答
追问
恩是 这种效果 但是最后一条 endda为空了
追答
你不是说最后一条的begda-1为上一条的endda么?那你最后总会有一条是空的啊。要不让,我用什么去-1?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
declare
begin
for a in (select * from test) loop
update test set begda=a.begda-1 where seq=a.seq and begda=a.begda;
commit;.
end loop;
end;
begin
for a in (select * from test) loop
update test set begda=a.begda-1 where seq=a.seq and begda=a.begda;
commit;.
end loop;
end;
更多追问追答
追问
你这个更新的是开始时间好吧 我要的是把后一条的 begda日期减一 放到上一条endda
追答
declare
begin
for a in (select * from test) loop
update test set endda=a.endda-1 where seq=a.seq and begda=a.begda ;
commit;.
end loop;
end;
当时没注意。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
create or replace procedure tmp_test is
begin
update test a set endda=(select begda-1 from test where seq=a.seq-1)
where exists(select 1 from test where seq=a.seq-1);
commit;
end;
begin
update test a set endda=(select begda-1 from test where seq=a.seq-1)
where exists(select 1 from test where seq=a.seq-1);
commit;
end;
更多追问追答
追问
我的seq列不都是连着的 比如第一个可能是1 下一个可能是3,5什么的 因为有插入失败的
还有你这个是吧前一条放到后一条了 我是要后一条 的begda放到上一条endda
追答
给test表临时插入一列,按顺序增加,再应用以上过程
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询