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

Langage SQL Discussion :

[Oracle 9i] Requete pour recuperer un maximum


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 16
    Points : 12
    Points
    12
    Par défaut [Oracle 9i] Requete pour recuperer un maximum
    Bonjour je me creuse la tête depuis un moment pour faire une requete et la je touche le fond. J'espere que je pourrais trouver parmi vous une solution. Voici le problème :

    Je suis sous Oracle 9i
    Mon schéma est le suivant

    EntiteA : Clé_A, Champ_A
    EntitéB : Clé_B, Clé_A , Champ_B
    EntitéC : Clé_C, Clé_A , Champ_C, dateC

    Il faut que pour chaque élément de B je recupere parmi les elements C qui sont liés au meme A (si il y en a) celui dont la date est la plus récente.

    Le but est d'avoir le resultat suivant :
    Clé_B, Champ_A, Champ_B, Champ_C

    Un grand merci si vous trouvez une requete qui permet de faire ça directement, sinon je suis bon pour un curseur.

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    Tu ne nous donne pas les cardinalités, je pense qu'un élément A peut être référencé par plusieurs B et plusieurc C ?

    Essaye Ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Cle_B, Champ_A, Champ_B, Champ_C
      FROM EntiteB B INNER JOIN EntiteA A ON B.Cle_A = A.Cle_A
                     INNER JOIN EntiteC C ON A.Cle_A = C.Cle_A
     WHERE C.Date_C = (SELECT MAX(Date_C)
                         FROM EntiteC C2
                        WHERE C2.Cle_A = C.cle_A )
    Je n'ai pas testé (pas de jeu d'essais) , mais la syntaxe me semble OK

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    pour les cardinalité c'est bien ça, c'est pour cela que je n'ai rien précisé.
    Je test demain et je te tiens au courant merci en tout cas.

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Ca a presque marché, le seul souci est que si plusieur entité C ont le même max, je veux recupere qu'un seul lien B-C.

    Pour info j'ai trouvé une solution en utilisant un rank() sur la date et la clé et en prenant que l'entite C dont le rank() vaut 1.

    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
    SELECT B.clé_b, A.champ_a, B.champ_b, C.champ_c,
         FROM entite_A A,
               entite_B B,        
              (
                 SELECT clé_c, champ_c, clé_a
                   FROM
                       (
                          SELECT clé_c, champ_c, clé_a, date_c,
                                 RANK() OVER( PARTITION BY clé_a ORDER BY date_c DESC, clé_c ASC) as rank
                            FROM entite_C
                       )
                 WHERE rank=1
              ) C
        WHERE B.clé_a= A.clé_a
            AND B.clé_a = C.clé_a
    );
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/12/2011, 13h16
  2. requete pour recuperer un max sous oracle
    Par donny dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/11/2007, 09h35
  3. Requete pour recuperer les cles primaires
    Par trinityb dans le forum SQL
    Réponses: 8
    Dernier message: 15/11/2007, 14h04
  4. Récupérer le maximum de 2 champs dans une requete SQL
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/07/2006, 11h15
  5. [oracle 9i] aide pour une requete
    Par jejam dans le forum Oracle
    Réponses: 6
    Dernier message: 31/08/2005, 14h15

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