J'ai une table sous oracle 8i qui se présente sous cette forme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
id             |id_parent      | caractéristique
1              |0              |carac_1
2              |0              |carac_2
3              |1              |carac_1
4              |3              |carac_3
En règle générale, chaque id ne peut être parent qu'une seule fois (parfois 2, quand la personne qui a ajouté un enregistrement a fait des bêtises ).
Un enfant n'a qu'un seul parent.
Un et un seul enfant peut hériter de la caractéristique du parent.
La caractéristique peut se transmettre sur 5 générations maximum.
La caractéristique ne peut pas exister sur 2 générations différentes.(si un enregistrement possède une caractéristique, seul ses parents ou ses enfants pourront posséder la même).

Je cherche à garder uniquement le ou les derniers enregistrements, pas les parents. Je souhaite également savoir depuis combien de générations la caractéristique existe.Je n'ai pas besoin de garder les enregistrements ou l'ID_parent est 0

Ma requête ressemble actuellement à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Select id, id_parent, caractéristique, level
from Ma_table
start with id_parent != 0
connect by prior id = id_parent
le level me donne le (nombre de génération -1)

Avec ce code, je peux savoir le nombre de générations totales, mais pas celle qui portent la caractéristique. Je peux faire cette vérification via mon langage de développement, mais l'application est déjà assez lente et la table possède quelques milliers d'enregistrements.
Y a-t-il moyen d'affiner plus la echerche, ou de l'effectuer complètement par ddes requetes?