IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Trouver dernier descendant dans une liste hiérarchique


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mai 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2016
    Messages : 3
    Par défaut Trouver dernier descendant dans une liste hiérarchique
    Bonjour, j'ai parcouru plusieurs forums mais je seche lamentablement.

    J'ai une table du type
    ID FAMILLE PERE ENFANT SEXE
    1 F1 nom1 nom2 M
    2 F1 nom2 nom3 M
    3 F1 nom3 nom4 F
    4 F1 nom4 nom5 M
    5 F2 nom11 nom12 M
    6 F2 nom12 nom13 F
    7 F2 nom13 nom14 M
    8 F3 nom21 nom22 F
    etc...

    Je voudrais trouver tous les liens de parente tel que le résultat soit
    F1 nom1 nom4 F
    F2 nom11 nom13

    Est-ce faisable en une seule requete?

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Petite question: quelle serait la règle pour remonter
    F1 nom1 nom4 F
    et non pas
    F1 nom1 nom4
    ,
    sachant que dans l'autre cas tu remonterais
    F2 nom11 nom13
    et pas
    F2 nom11 nom13 F
    ?

    @+

  3. #3
    Candidat au Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mai 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2016
    Messages : 3
    Par défaut
    J'ai fait une erreur de frappe je voudrais retourner la même chose dans les 2 cas:

    F1 nom1 nom4 F
    F2 nom11 nom13 F

  4. #4
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Si on peut se fier sur les colonnes ID et Famille, alors j'aurais tendance a penser que l'on doit pouvoir passer directement avec un "KEEP DENSE_RANK", par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    WITH src
            AS (SELECT 1 id, 'F1' famille, 'nom1' pere, 'nom2' enfant, 'M' sexe FROM DUAL
                UNION ALL
                SELECT 2 id, 'F1' famille, 'nom2' pere, 'nom3' enfant, 'M' sexe FROM DUAL
                UNION ALL
                SELECT 3 id, 'F1' famille, 'nom3' pere, 'nom4' enfant, 'F' sexe FROM DUAL
                UNION ALL
                SELECT 4 id, 'F1' famille, 'nom4' pere, 'nom5' enfant, 'M' sexe FROM DUAL
                UNION ALL
                SELECT 5 id, 'F2' famille, 'nom11' pere, 'nom12' enfant, 'M' sexe FROM DUAL
                UNION ALL
                SELECT 6 id, 'F2' famille, 'nom12' pere, 'nom13' enfant, 'F' sexe FROM DUAL
                UNION ALL
                SELECT 7 id, 'F2' famille, 'nom13' pere, 'nom14' enfant, 'M' sexe FROM DUAL
                UNION ALL
                SELECT 18 id, 'F3' famille, 'nom21' pere, 'nom22' enfant, 'M' sexe FROM DUAL)
      SELECT a.famille
           , MIN (pere) KEEP (DENSE_RANK FIRST ORDER BY id) premier_nom_famille
           , MAX (pere) KEEP (DENSE_RANK LAST ORDER BY id) dernier_nom_famille
        FROM src a
    GROUP BY a.famille
    Sinon, il te faudra surement partir sur "hierarchical queries", donc voir du côté connect by en utilisant la relation en "pere" et "enfant", etc.

    A voir en fonction de la situtation ...

    @+

  5. #5
    Candidat au Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mai 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2016
    Messages : 3
    Par défaut
    bonjour,

    Merci de votre réponse. Je ne peux pas me fier sur les identifiants. les données ne sont pas chargées dans l'ordre.
    J'ai essayé "connect by" mais je n'ai pas réussi à coder correctement la requete.

  6. #6
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Je dirais qqchose comme ca alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    WITH src
            AS (SELECT 1 id, 'F1' famille, 'nom1' pere, 'nom2' enfant, 'M' sexe FROM DUAL
                UNION ALL
                SELECT 2 id, 'F1' famille, 'nom2' pere, 'nom3' enfant, 'M' sexe FROM DUAL
                UNION ALL
                SELECT 3 id, 'F1' famille, 'nom3' pere, 'nom4' enfant, 'F' sexe FROM DUAL
                UNION ALL
                SELECT 4 id, 'F1' famille, 'nom4' pere, 'nom5' enfant, 'M' sexe FROM DUAL
                UNION ALL
                SELECT 5 id, 'F2' famille, 'nom11' pere, 'nom12' enfant, 'M' sexe FROM DUAL
                UNION ALL
                SELECT 6 id, 'F2' famille, 'nom12' pere, 'nom13' enfant, 'F' sexe FROM DUAL
                UNION ALL
                SELECT 7 id, 'F2' famille, 'nom13' pere, 'nom14' enfant, 'M' sexe FROM DUAL
                UNION ALL
                SELECT 18 id, 'F3' famille, 'nom21' pere, 'nom22' enfant, 'M' sexe FROM DUAL)
      SELECT id_pere
           , MIN (pere) KEEP (DENSE_RANK FIRST ORDER BY id_pere, lvl) premier_nom_famille
           , MAX (enfant) KEEP (DENSE_RANK LAST ORDER BY id_pere, lvl) dernier_nom_famille
        FROM (    SELECT a.*, LEVEL lvl, CONNECT_BY_ROOT a.pere id_pere
                    FROM src a
              CONNECT BY a.pere = PRIOR a.enfant
              START WITH a.pere NOT IN (SELECT enfant
                                          FROM src))
    GROUP BY id_pere
    ORDER BY 1;
    @+

Discussions similaires

  1. trouver le max dans une liste
    Par peterpan3000 dans le forum Général Python
    Réponses: 4
    Dernier message: 08/01/2015, 10h35
  2. Fonction récursive trouver le max dans une liste.
    Par shirohige dans le forum Lisp
    Réponses: 17
    Dernier message: 17/09/2014, 19h54
  3. liste des descendants dans une table hiérarchique
    Par dingoth dans le forum Administration
    Réponses: 4
    Dernier message: 02/11/2008, 20h36
  4. Réponses: 1
    Dernier message: 14/09/2007, 18h04
  5. Trouver une valeur majoritaire dans une liste
    Par gregcat dans le forum Langage
    Réponses: 1
    Dernier message: 22/08/2007, 17h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo