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 averti
    Inscrit en
    Février 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 14
    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 Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    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
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  3. #3
    Membre Expert
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    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 Expert
    Avatar de hpalpha
    Inscrit en
    Mars 2002
    Messages
    769
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 769
    Par défaut
    oups, j'ai répondu un peu tardivement scheu

  5. #5
    Membre averti
    Inscrit en
    Février 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 14
    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 chevronné Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    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 Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    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
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  8. #8
    Membre chevronné Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    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 averti
    Inscrit en
    Février 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 14
    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, 12h32
  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, 16h17
  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, 13h48
  4. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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