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][Débutant] Utilisation de MAX avec autres champs


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Par défaut [Oracle 9i][Débutant] Utilisation de MAX avec autres champs
    Bonjour,

    J'ai ces données:

    A 12/02/2004
    B 15/08/2003
    C 16/10/1998

    Comment puis-je faire pour sélectionner la date la plus récente ? (en pl/sql, oracle 9i)

    Merci!

  2. #2
    Membre averti Avatar de rstephane
    Inscrit en
    Avril 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2003
    Messages : 59
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(ChampDate) FROM TaTable

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Par défaut
    hum ok !
    Mais maintenant, si je veux sélectionner les autres infos de la tables (sur la même ligne, je dois faire un join left select... etc ?)

    Car sinon j'ai une erreur "la fonction de groupe ne porte pas sur un groupe simple"

    merci!

  4. #4
    Membre averti Avatar de rstephane
    Inscrit en
    Avril 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2003
    Messages : 59
    Par défaut
    Ca dépend de ta problématique... Moi j'utiliserais un GROUP BY si tous les champs que tu veux récupérer font partie de la clé ou alors une sous-requête...

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Tu dois procéder ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Champ1, Champ2, MAX(Champ3)
    FROM MaTable
    GROUP BY Champ1, Champ2
    Les champs non concernés par une fonction d'aggrégation (MAX, SUM, etc.) doivent être dans la clause "Group By"

    un petit tour par les tutos me semble incontournable

    - cf Le simple (?) SELECT pour commencer

    - et ensuite : Groupage, ensembles et sous ensembles
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Par défaut
    Merci beaucoup!

    j'ai néanmoins résolu mon problème avec cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT * 
    FROM maTable ab        
     
    where ab.maDate in
     
    (SELECT max(mc.maDate)
        FROM maTable mc
        WHERE mc.MonChamp='MO')        
     
    and ab.MonChamp='MO'
    Peut etre n'est elle pas optimisée...

    Merci en tout cas!

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Non, elle n'est pas optimisée

    "IN" est fait pour parcourir un liste de valeurs. Or, un "SELECT MAX" ne te ramènera qu'une seule ligne possible (attention néanmoins au NULL)

    Donc tu peux remplacer "IN" par "=" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * 
      FROM maTable ab        
     WHERE ab.maDate = (SELECT MAX(mc.maDate)
                          FROM maTable mc
                         WHERE mc.MonChamp = 'MO')        
    and ab.MonChamp = 'MO'
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

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

Discussions similaires

  1. Utilisation de MAX avec String dans une requête SQL
    Par Sun03 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/04/2010, 12h22
  2. MAX et autre champ
    Par sabotage dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/07/2008, 16h49
  3. [Oracle9] utilisation de max
    Par moicwill dans le forum Oracle
    Réponses: 10
    Dernier message: 08/03/2006, 11h12
  4. [Think Pascal] Utilisable sous Max OS X ?
    Par clavius dans le forum Autres IDE
    Réponses: 1
    Dernier message: 13/01/2006, 22h26
  5. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38

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