create table test(trip number,stp varchar2(1),tm varchar2(10),seq number);insert into test values (1, 'A', '1:10', 1);insert into test values (1, 'B', '1:16', 2); insert into test values (1, 'B', '1:20', 2);insert into test values (1 , 'B', '1:25', 2);insert into test values (1 , 'C', '1:31', 3);insert into test values (1, 'B', '1:40', 4);insert into test values (2, 'A', '2:10', 1);insert into test values (2, 'B', '2:17', 2);insert into test values (2, 'C', '2:20', 3);insert into test values (2, 'B', '2:25', 4);select t1.* ,sum(depre(t1.stp,t1.prev_stp,0,1)) over (partition by trip order by tm) new_seqfrom (select t.* ,lag(stp) over (order by t.tm) prev_stp from test t order by tm) t1; TRIP S TM SEQ P NEW_SEQ------ - ---------- ---------- - ---------- 1 A 1:10 1 1 1 B 1:16 2 A 2 1 B 1:20 2 B 2 1 B 1:25 2 B 2 1 C 1:31 3 B 3 1 B 1:40 4 C 4 2 A 2:10 1 B 1 2 B 2:17 2 A 2 2 C 2:20 3 B 3 2 B 2:25 4 C 4 10 rows selected
您想查看停靠点是否在一行和下一行之间改变。如果是这样,您要增加序列。因此,请使用lag将上一个停靠点移至当前行。
我之所以使用DECODE是因为它处理NULL的方式,并且比CASE更为简洁,但是如果您正在阅读教科书,则可能应该使用CASE。
将SUM用作带有ORDER BY子句的解析函数将提供您要寻找的答案。



