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

PostgreSQL Discussion :

Requête avec maximum


Sujet :

PostgreSQL

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 14
    Points : 13
    Points
    13
    Par défaut Requête avec maximum
    Bonjour tout le monde,

    Je sèche un peu pour écrire ma requête : voilà, j'ai une table avec les colonnes a,b,c,d,... . Je voudrais rechercher les lignes où, pour une valeur donnée dans a, et une valeur données dans b, c est maximum, et ce bien sûr pour toutes les valeurs de a et b.

    Pour expliquer un peu plus, a et b identifient des personnes et des formulaires, et c un niveau d'itération. Par exemple, la premiere fois que la personne a0 remplie le formulaire b0, c vaut 1, mais pour la deuxième fois, les réponse sont enregistrées avec c=2. Je voudrais ne garder que les derniers essais.

    J'ai essayer de jouer avec la fonction max(), mais je n'obtiens pas vraiment ce que je veux. Merci de votre aide !

    Alexis

    ps : j'utilise postgresql 8.2

  2. #2
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 738
    Points
    1 738
    Par défaut
    Je ne suis pas sûr d'avoir compris, mais si pour chaque couple (a,b) distinct, tu cherche le max de c, la requête est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select a,b,max(c) from table group by a,b
    Si tu veux en plus les autres colonnes (d,e, ...) correspondant au max(c), il faut faire une sous-requête

  3. #3
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    bonjour,
    je suis pas sur de comprendre, mais as tu essayer une requete du genre :
    SELECT a,b,max(c) FROM matable GROUP BY a,b

    ?

  4. #4
    Membre émérite
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Points : 2 545
    Points
    2 545
    Par défaut
    oups, j'ai répondu un peu tardivement scheu

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Merci,

    J'étais arrivé à ce genre de requête, mais ça ne fait pas totalement ce que je veux. Je n'ai peut-être pas été clair : pour chaque couple (a,b), il y a plusieurs valeurs de c, et à chaque fois plusieurs valeurs des autres colonnes ( d,e,... )
    Ce que je voudrais, c'est récupérer toutes les colonnes, pour le maximum de c pour chaque couple a,b.

    Pour résumé : SELECT * FROM TABLE WHERE ( c est un maximum pour le couple (a,b) )

    Peut-être que cela correspond à une sous-requête, comme tu le suggères, scheu, mais je ne vois toujours pas très bien comment.

    Alexis

  6. #6
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    Bonjour,

    SELECT * FROM TABLE WHERE ( c est un maximum pour le couple (a,b) )
    Essayes ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM TABLE t1, (SELECT a, b, max(c) FROM TABLE GROUP BY a,b) t2  
    WHERE  t1.a = t2.a 
         AND t1.b = t2.b
         AND t1.c = t2.c

  7. #7
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 738
    Points
    1 738
    Par défaut
    Citation Envoyé par icer Voir le message
    Bonjour,



    Essayes ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM TABLE t1, (SELECT a, b, max(c) FROM TABLE GROUP BY a,b) t2  
    WHERE  t1.a = t2.a 
         AND t1.b = t2.b
         AND t1.c = t2.c
    Il faut effectivement passer par une sous-requête. Pour la syntaxe, il manquerait peut-être quelques "as" (à vérifier) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM TABLE as t1, (SELECT a, b, max(c) as c FROM TABLE GROUP BY a,b) as t2  
    WHERE  t1.a = t2.a 
         AND t1.b = t2.b
         AND t1.c = t2.c

  8. #8
    Membre averti Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Points : 363
    Points
    363
    Par défaut
    ... est essentiel pour retourner les résultats voulus. Ne pas le mettre est une erreur. Les autres "as" sont optionnels.

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup, avec ça j'ai de qu'il me faut

    A.

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

Discussions similaires

  1. Requête avec la date Maximum
    Par Sayrus dans le forum Requêtes
    Réponses: 1
    Dernier message: 09/09/2013, 13h32
  2. [phpMyAdmin] problème avec une requête sql (Maximum execution time)
    Par med125 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 14/10/2012, 17h17
  3. [AC-2000] Requête de sélection avec maximum
    Par Gabout dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 22/07/2009, 14h48
  4. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 11h33
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 19h02

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