2013-05-03 67 views
0

我有以下的Oracle SQL查询:甲骨文层次查询记录之前最大使用量记录

select id_emp_no, 
     LEVEL, 
     CONNECT_BY_ISLEAF isleaf 
from my_table 
start with id_emp_no = :x 
connect by prior my_mgr = id_emp_no 
ORDER BY level 

这将产生以下输出:

ID_EMP_NO LEVEL ISLEAF 
11   1  0 
22   2  0 
33   3  0 
44   4  0 
55   5  0 <<==== 
66   6  1 

基于上述输出,实际的结果ID_EMP_NO我后面的具体情况是ID_EMP_NO = 55,即记录在最高级别之前,并且ISLEAF之前的记录等于1

所以只想返回记录,其中我D_EMP_NO = 55.

对上述任何帮助将不胜感激。

谢谢。

+0

放在一个内嵌视图,然后车ck for isleaf = 1? – OldProgrammer 2013-05-03 01:28:38

+0

假设您拥有自上而下的经理 - 员工层次结构,请确保您明白“通过事先my_mgr = id_emp_no连接”实际上是在树上。很多人对此感到困惑。 – 2013-05-03 08:18:48

回答

4

记住prior只不过是运营商从层次结构的上层指定此列的值,这意味着你可以用它(几乎)在您的查询的任何地方:

SQL Fiddle

select prior id_emp_no 
    from my_table 
where CONNECT_BY_ISLEAF = 1 
start with id_emp_no = 11 
connect by prior my_mgr = id_emp_no 

Results

| PRIORID_EMP_NO | 
------------------ 
|    55 | 
+0

+1比我的好得多。 – 2013-05-03 12:48:34

+0

完美 - 正是我以后的样子。谢谢。 – tonyf 2013-05-06 06:16:28