3,490
社区成员
发帖
与我相关
我的任务
分享
create table test_190507(part VARCHAR(50), val1 NUMERIC, val2 NUMERIC);
insert into test_190507(part, val1, val2) values ('a', 1, 4);
insert into test_190507(part, val1, val2) values ('a', 2, 3);
insert into test_190507(part, val1, val2) values ('a', 3, 2);
insert into test_190507(part, val1, val2) values ('a', 4, 1);
insert into test_190507(part, val1, val2) values ('b', 1, 4);
insert into test_190507(part, val1, val2) values ('b', 1, 3);
insert into test_190507(part, val1, val2) values ('b', 2, 2);
insert into test_190507(part, val1, val2) values ('c', 1, 3);
insert into test_190507(part, val1, val2) values ('c', 2, 2);
with tab0 as(
select * from test_190507 t1
order by t1.part, t1.val1 --对应order by
)
, tab1 as (
select t1.*, rownum rn from tab0 t1
)
select t1.*, t1.rn - t2.mn + 1 row_number from tab1 t1,
(select t1.part, count(1) ct, min(t1.rn) mn from tab1 t1
group by t1.part --对应partition by
) t2
where t1.part = t2.part
order by t1.rn
;
drop table test_190507;