问题描述
大家好,
我有所有记录都通用的列ord,然后是person_no。这可以重复。
我有一个名为flag的列,它是一个序列。我正在尝试填充一个新列 (NEW_FLAG),该列基本上将根据填充的顺序对person_no进行排名 (基于标志列)
Op应该是这样的
订单人员 _ 无标志NEW_FLAG
2999362 21065699 1 1
2999362 21065699 2 1
2999362 12158176 3 2
2999362 10750089 4 3
2999362 5475332 5 4
2999362 11150508 6 5
2999362 5475332 7 4
2999362 3807718 8 6
2999362 3991003 9 7
2999362 3754090 10 8
你能帮忙吗
我有所有记录都通用的列ord,然后是person_no。这可以重复。
我有一个名为flag的列,它是一个序列。我正在尝试填充一个新列 (NEW_FLAG),该列基本上将根据填充的顺序对person_no进行排名 (基于标志列)
Op应该是这样的
订单人员 _ 无标志NEW_FLAG
2999362 21065699 1 1
2999362 21065699 2 1
2999362 12158176 3 2
2999362 10750089 4 3
2999362 5475332 5 4
2999362 11150508 6 5
2999362 5475332 7 4
2999362 3807718 8 6
2999362 3991003 9 7
2999362 3754090 10 8
你能帮忙吗
专家解答
这里有一种方法来解决这个问题:
-使用first_value查找每个人的第一个标志值
-使用这个计算的第一个标志来排名 () 的结果:
-使用first_value查找每个人的第一个标志值
-使用这个计算的第一个标志来排名 () 的结果:
create table test_table (
ord number, person_no number, flag number
);
insert into test_table values (2999362,3754090,10);
insert into test_table values (2999362,3807718,8);
insert into test_table values (2999362,3991003,9);
insert into test_table values (2999362,5475332,7);
insert into test_table values (2999362,5475332,5);
insert into test_table values (2999362 ,10750089,4);
insert into test_table values (2999362, 11150508,6);
insert into test_table values (2999362, 12158176,3);
insert into test_table values (2999362, 21065699,1);
insert into test_table values (2999362, 21065699,2);
commit;
with first_flags as (
select t.*,
first_value ( flag ) over (
partition by person_no order by flag
) fv_flag
from test_table t
)
select ord, person_no,
rank () over (
order by fv_flag
) rk
from first_flags
order by flag;
ORD PERSON_NO RK
2999362 21065699 1
2999362 21065699 1
2999362 12158176 3
2999362 10750089 4
2999362 5475332 5
2999362 11150508 7
2999362 5475332 5
2999362 3807718 8
2999362 3991003 9
2999362 3754090 10 文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




