类别 顺序号 父SEQ 类别以ABCD为顺序
DATA_TYPE SEQ PSEQ
A 1 0 A的父SEQ没有,则为0
B 2 1 B的父SEQ为上一个A的SEQ,为1
C 3 2 C的父SEQ为上一个B的SEQ,为2
D 4 3 C的父SEQ为上一个B的SEQ,为3
A 5 0 A的父SEQ没有,则为0
B 6 5 B的父SEQ为上一个A的SEQ,为5,不是第一个A,是比当前B的SEQ小的A的最大SEQ
C 7 6 C的父SEQ为上一个B的SEQ,为6,不是第一个B,是比当前C的SEQ小的B的最大SEQ
D 8 7 同上
D 9 7 同上
C 10 6 C的父SEQ为上一个B的SEQ,为6,不是第一个B,是比当前C的SEQ小的B的最大SEQ
D 11 10 D的父SEQ为上一个C的SEQ,为10,不是第一个C,也不是第二个C,是比当前B的SEQ小C的最大SEQ请教该如何取得PSEQ的值,谢谢了~

解决方案 »

  1.   

    呵呵,看错.以为你是递归结构
    SQL> select * from t_get_num;
     
    DATA_TYPE         SEQ       PSEQ
    ---------- ---------- ----------
    A                   1 
    B                   2 
    C                   3 
    D                   4 
    A                   5 
    B                   6 
    C                   7 
     
    7 rows selected
     
    SQL> update t_get_num a set a.pseq=nvl((select max(seq) from t_get_num b where b.seq<a.seq and b.data_type<a.data_type),0);
     
    7 rows updated
     
    SQL> select * from t_get_num;
     
    DATA_TYPE         SEQ       PSEQ
    ---------- ---------- ----------
    A                   1          0
    B                   2          1
    C                   3          2
    D                   4          3
    A                   5          0
    B                   6          5
    C                   7          6
     
    7 rows selected
     
    SQL>