2016-11-20 4 views
1

Ich habe Abfrage wie folgt:Oracle SQL - wählen Sie Zeilen mit dem höchsten Niveau

SELECT CONNECT_BY_ROOT(name), LEVEL 
    FROM Workers 
    CONNECT BY PRIOR boss=nick 
    START WITH function IN ('programmer', 'designer'); 

ich:

BELLA 1 
BELLA 2 
BELLA 3 
MICKEY 1 
MICKEY 2 
BOB  1 
BOB  2 
DUDE 1 
DUDE 2 
DUDE 3 
SONIA 1 
SONIA 2 
SONIA 3 
KATE 1 
KATE 2 
KATE 3 
LUKE 1 
LUKE 2 
LUKE 3 
LUKE 4 

Was würde Ich mag es, mit dem höchsten Niveau Namen zu erhalten. ich meine:

BELLA 3 
MICKEY 2 
BOB  2 
DUDE 3 
SONIA 3 
KATE 3 
LUKE 4 

ich es versucht wie folgt:

SELECT CONNECT_BY_ROOT(name), MAX(LEVEL) 
    FROM Workers 
    CONNECT BY PRIOR boss=nick 
    START WITH function IN ('programmer', 'designer') 
    GROUP BY CONNECT_BY_ROOT(name); 

aber es funktioniert nicht. Ich bekomme '00979. 00000 - kein GROUP BY Ausdruck 'Fehler. Warum? Wie kann ich es funktionieren lassen?

Antwort

2

connect_by_isleaf

SELECT CONNECT_BY_ROOT(name), LEVEL 
FROM Workers 
WHERE connect_by_isleaf = 1 
CONNECT BY PRIOR boss=nick 
START WITH function IN ('programmer', 'designer'); 
+0

Ja, alles in allem war der Punkt, danke :) – michalsol

2

Ein Verfahren verwendet einen CTE:

with t(name, lev) as (
     SELECT CONNECT_BY_ROOT(name), LEVEL 
     FROM Workers 
     CONNECT BY PRIOR boss=nick 
     START WITH function IN ('programmer', 'designer') 
    ) 
select name, max(lev) 
from t 
group by name; 
Verwandte Themen