您如何在Oracle表中的列中向下移动值



给定以下Oracle数据库表:

小组修订评论1 1 11 2 21个无效2 1 12 2 22 3 32 4 42空null3 1 13 2 23 3 33零空

我想在其组内将评论列与版本的第一个逐步降低,以便我得到下表:

小组修订评论1 1空1 2 11个空22 1空2 2 12 3 22 4 32 NULL 43 1空3 2 13 3 23 NULL 3

我有以下查询:

   合并为示例_Table T1    使用example_table T2    在 (       (t1.revision = t2.Revision 1或       (t2.revision =((          选择最大(t3.revision)          来自example_table T3          其中t3.group = t1.group       )和t1。    )    和t1.group = t2.group)    匹配时,更新设置t1.comment = t2.comment;

执行大部分的

(仍然需要单独的查询来覆盖修订= 1),但非常慢。

所以我的问题是,我如何在此处尽可能高效地使用Max来为每个组提取最高的修订?

我将使用 lag而不是 max

create table example_table(group_id number, revision number, comments varchar2(40));
insert into example_table values (1,1,1);
insert into example_table values (1,2,2);
insert into example_table values (1,3,null);
insert into example_table values (2,1,1);
insert into example_table values (2,2,2);
insert into example_table values (2,3,3);
insert into example_table values (2,4,null);
select * from example_table;
merge into example_table e
using (select group_id, revision, comments, lag(comments, 1) over (partition by group_id order by revision nulls last) comments1 from example_table) u
on (u.group_id = e.group_id and nvl(u.revision,0) = nvl(e.revision,0))
when matched then update set comments = u.comments1;
select * from example_table;

相关内容

  • 没有找到相关文章

最新更新