根据类别,顺序号,取父顺序号的SQL

WUNKANG 2010-11-26 09:49:05
类别 顺序号 父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的值,谢谢了~
...全文
74 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
WUNKANG 2010-11-26
  • 打赏
  • 举报
回复
谢谢~
试过子查询的方式/
比较慢/
有没有性能比较好的方法哈/
minitoy 2010-11-26
  • 打赏
  • 举报
回复
呵呵,看错.以为你是递归结构
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>
minitoy 2010-11-26
  • 打赏
  • 举报
回复
level-1
minitoy 2010-11-26
  • 打赏
  • 举报
回复
哈哈,貌似没有吧.

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧