2013-05-03 68 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