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 :

Problème Group by


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème Group by
    Bonjour à tous, c'est une petite débutante qui vous écrit

    Voici ma table "pesee":

    Poteau_ref | Date_pesee | Debit
    2076 | 10/06/2007 |
    2076 | 20/07/2006 | 60
    2076 | 10/10/2005 | 50
    1015 | 20/10/2007 |
    1015 | 15/10/2006 |
    1015 | 07/07/2005 | 40

    Je souhaiterai sélectionner pour chaque "poteau_ref" la valeur du dernier "debit" effectué (par rapport au champ "Date_pesee").Exemple du résultat:

    Poteau_ref | Date_pesee | Debit
    2076 | 20/07/2006 | 60
    1015 | 07/07/2005 | 40

    J'ai donc effectué cette requête:
    select poteau_ref, MAX(date_pesee) from pesee where debit is not null group by pt_eau_ref
    Celle ci me ramène donc pour chaque "poteau_ref" le dernier controle de débit effectué mais sans la valeur du "Debit". Je rajoute donc dans ma requête le champ "Debit" après "MAX(date_pesee)" mais celle ci ne fonctionne plus.

    Que dois donc faire pour qu'elle fonctionne.

    Merci à tous pour votre aide

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    il faut mettre dans ton group by TOUS les champs non agrégés qu'il y a dans le select

  3. #3
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select poteau_ref, MAX(date_pesee) from pesee where debit is not null group by pt_eau_ref
    Ta requête devient donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select poteau_ref,debit , MAX(date_pesee) from pesee where debit is not null group by pt_eau_ref , debit
    Seulement la tu peux avoir plusieurs résultats pour un meme poteau....
    Donc moi je ferais


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select poteau_ref,max(debit), MAX(date_pesee) from pesee where debit is not null group by pt_eau_ref

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème group by
    Merci pour ta réponse Miloux32 mais si par exemple j'ai à la base ce type de données:

    Poteau_ref | Date_pesee | Debit
    2076 | 10/06/2007 |
    2076 | 20/07/2006 | 40
    2076 | 10/10/2005 | 50
    1015 | 20/10/2007 |
    1015 | 15/10/2006 |
    1015 | 07/07/2005 | 40

    avec ta requête:
    SELECT poteau_ref,max(debit), MAX(date_pesee) FROM pesee WHERE debit IS NOT NULL GROUP BY pt_eau_ref

    je vais récupérer:
    Poteau_ref | Date_pesee | Debit
    2076 | 20/07/2006 | 50 au lieu de 40
    1015 | 07/07/2005 | 40

    donc ça ne va toujours pas

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Une petite suggestion : Dans ce genre de cas, en SQL, je décompose toujours ce que je veux obtenir : le débit pour la date max de chaque poteau.

    dans un premier temps : la date max de chaque poteau : c'est ta requète initiale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select poteau_ref, MAX(date_pesee) 
    from pesee 
    where debit is not null 
    group by pt_eau_ref
    Ensuite, pour chacune des paires (poteau,date) obtenue, on recherche son débit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select poteau_ref, date_pesee, débit 
    from pesee a 
    where exists
    ( select poteau_ref, MAX(date_pesee) 
      from pesee b 
      where debit is not null 
      and max(b.date_pesee) = a.date_pesee 
      and b.poteau_ref = a.poteau_ref 
      group by pt_eau_ref 
    )
    Ici, on fait une jointure de pesée sur un sous-ensemble de pesee
    les lettres "a" et "b" qui suivent les noms de fichiers permettent d'identifier précisemment les zones.
    (Ceci n'est pas valable pour tous les SQL. Sur quel SGBD travailles-tu ?)

    J'espère que celà répond à ta question.

Discussions similaires

  1. Problème group by dans requete union
    Par benjisan dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 07/01/2008, 16h49
  2. SharePoint 2007 - Problème groupes et permissions
    Par Najla dans le forum SharePoint
    Réponses: 3
    Dernier message: 20/03/2007, 22h42
  3. Problème group by
    Par nellynew dans le forum Langage SQL
    Réponses: 7
    Dernier message: 19/01/2007, 15h28
  4. [SQL] Problème group by sur view
    Par helene34 dans le forum Oracle
    Réponses: 2
    Dernier message: 04/01/2007, 08h25
  5. Problème Group By
    Par Fishes83 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/01/2007, 13h52

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