求助一sql,如何取到同一ID最后一次变动

KFeng_bird 2010-01-14 10:35:02
求助一sql怎么写。有表a,结构如下 客户ID 合同ID 合同日志ID 上次变动ID 。其中合同日志ID为主键,每次变更合同就会新增一条记录。现在要在每次新增后更新这次变更的上次变动ID。
...全文
225 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
千骑卷平冈 2010-01-14
  • 打赏
  • 举报
回复
insert into a (客户ID,合同ID,合同日志ID,上次变动ID) values(
'0001','0001',seq_合同日志ID.nextval,(select 合同ID from (select 合同ID,max(合同日志ID) from a group by 合同ID)
)
zhangwonderful 2010-01-14
  • 打赏
  • 举报
回复
变更合同时把当前的合同ID得到,然后根据新的合同ID作为条件更新就可以了
wylsjz 2010-01-14
  • 打赏
  • 举报
回复
使用序列

例子

序列
create sequence a01_bi_trg
increment by 1
start with 1
minvalue 1
maxvalue 999999999
cycle
nocache;

select a01_id_reg.nextval from dual

select a01_id_reg.currval from dual

触发器
create or replace trigger a01_bi_trg
before insert on a01
for each row
begin
select a01_id_reg.nextval into :new.a01_id from dual;
end;
/

insert into a01 (a0101,a0102,a0103,a0104,a0105,a0106)
values ('02','bbb','sdfs','sasa','hgjg','sdfgs')
yhl_star 2010-01-14
  • 打赏
  • 举报
回复
写个触发器吧
小灰狼W 2010-01-14
  • 打赏
  • 举报
回复
在合同表上建触发器
create or replace trigger TGNAME
after insert or update on 合同表
for each row
declare
v_last_id number;
begin
if updating then
select max(合同日志id) into v_last_id
from 日志表 where 合同id=:new.合同id;
end if;
insert into 日志表 values(xxx,:new.合同id,xxx,v_last_id);
end;
runbaobao88 2010-01-14
  • 打赏
  • 举报
回复
假定你要插入客户ID等于1,合同ID等于20,合同日志ID等于300的记录

insert into a (客户ID,合同ID,合同日志ID,上次变动ID)
select 1, 20, 300 , max(上次变动ID)+1 from a where 合同日志ID=300

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧