如何用oracle存储过程实现某表中下一条数据的结束时间列日减去1,修改到上一条数据的开始时间列 70

test表有seq列,开始日期begda列结束日期endda列有多条数据现在想把后一条的begda日期减一放到上一条endda真心求教达人怎么做啊... test表 有seq列,开始日期begda列 结束日期endda列
有多条数据 现在想把后一条的 begda日期减一 放到上一条endda
真心求教达人怎么做啊
展开
 我来答
的花长0J
2012-05-29 · TA获得超过129个赞
知道答主
回答量:134
采纳率:0%
帮助的人:66.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
更多追问追答
追问
恩是 这种效果 但是最后一条 endda为空了
追答
你不是说最后一条的begda-1为上一条的endda么?那你最后总会有一条是空的啊。要不让,我用什么去-1?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金久利8384
2012-05-29 · TA获得超过114个赞
知道小有建树答主
回答量:130
采纳率:0%
帮助的人:75.8万
展开全部
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;
更多追问追答
追问
你这个更新的是开始时间好吧 我要的是把后一条的 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;
当时没注意。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
厍曼冬6o
2012-05-29 · TA获得超过1569个赞
知道小有建树答主
回答量:1336
采纳率:0%
帮助的人:1210万
展开全部
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;
更多追问追答
追问
我的seq列不都是连着的 比如第一个可能是1 下一个可能是3,5什么的 因为有插入失败的
还有你这个是吧前一条放到后一条了 我是要后一条 的begda放到上一条endda
追答
给test表临时插入一列,按顺序增加,再应用以上过程
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式