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

  1. #1
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    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 du Club Avatar de rstephane
    Inscrit en
    Avril 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 42

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

  3. #3
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    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 du Club Avatar de rstephane
    Inscrit en
    Avril 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2003
    Messages : 59
    Points : 48
    Points
    48
    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é
    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
    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

  6. #6
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    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é
    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
    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'

  8. #8
    Débutant
    Inscrit en
    Juin 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 108
    Points : 52
    Points
    52
    Par défaut
    Bon, là je suis perdu

    Voilà ce que je souhaitais faire :

    j'ai
    Entité---Date---Note---Agence
    A---22/11/2005---B---A1
    A---17/09/2003---A---A1
    A---24/04/2005---C---A2
    A---29/08/2003---B---A2

    et je souhaite arriver à :
    A---22/11/2005---B---A1
    A---22/11/2005---C---A2 (car la note d'A2 est C depuis 24/04/05)

    A---17/09/2003---A---A1
    A---17/09/2003---B---A2 (car la note d'A2 est B depuis 29/08/2003)


    Et là je m'enfonce dans ma requête
    qq1 aurait une idée simple ?

+ 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