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 avec GROUP BY


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2014
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Problème avec GROUP BY
    Bonjour

    Voici à quoi ressemblent les tables sur lesquelles je dois effectuer ma requête.

    HOSPI

    num | ho_manum | debut
    457896 1578459612 21/08/2015
    459632 1578459612 11/07/2015
    125689 7845128969 25/09:2016
    124895 4521585611 12/04/2015
    487596 4521585611 07/07/2016
    484589 4521585611 07/08/2016


    IDENTITE

    nom | prenom | si_manum
    test1 prenom1 1578459612
    test2 prenom2 7845128969
    test3 prenom3 4521585611


    Je voudrais effectuer une requête sql pour récupérer le nom, prénom, manumdos et le num le plus récent.

    j'ai donc voulu passer par une requête avec un MAX dans le select

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select max(debut), ho_manumdos, num, nom, prenom
    from hospi, identite
    where ho_manum = si_manum
    group by ho_manumdos, si_nom, si_prenom
    Cependant cette requête ne fonctionne pas du fait que j’enlève le 'num' de mon group by; et si je l'ajoute dans mon group by cela fausse totalement ma requête.

    Cordialement,

    Slach'

  2. #2
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Quel est ton SGBD ?

    La réponse a ton besoin est l'utilisation de fonction la Fenêtré Max(debut) Over (Partition BY ho_manum ) .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    With Calcul_Max_Num  as
               ( 
                   Select debut
                             , ho_manumdos
                             , num
                             , nom
                             , prenom
                             , max(Debut) Over (Partition BY  ho_manum ) as Max_Debut
                 from hospi
                       INNER JOIN identite
                       ON ho_manum = si_manum
               )
    select  
                              ho_manumdos
                             , num
                             , nom
                             , prenom
     
    From Calcul_Max_Num 
    Where debut = Max_Debut
    Pendant que j'y suis ta façon de faire les jointures est obsolète sur ce point je te conseil de regarder le blogue de Lyche http://www.developpez.net/forums/blo...jointures-sql/
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Une autre solution possible, notamment si votre SGBD n'accepte pas les fonctions de fenêtrage (MySQL, Access...)
    et avec là aussi une jointure normalisée (JOIN)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select debut, 
           ho_manumdos, 
           num, 
           nom, 
           prenom
    from  hospi as H1   
    inner join identite
       on ho_manum = si_manum
    where not exists
         (select 1
          from hospi as H2
          where H2.manum = H1.manum
            and H2.debut > H1.debut)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2014
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Tout d'abord merci à vous 2


    @GeekMokona

    J'utilise Oracle

    Je suis débutant en SQL je ne connaissais donc pas du tout cette possibilité, elle fonctionne cependant elle m'affiche des doublons donc ne sélectionne pas le MAX.
    par exemple :

    457896 1578459612 21/08/2015 test1 prenom1
    459632 1578459612 11/07/2015 test1 prenom1

    Alors que je voudrais uniquement la ligne dont la date est la plus recente

    457896 1578459612 21/08/2015 test1 prenom1

    @escartefigue

    J'ai essayer la requête que tu m'a donné cependant elle ne fonctionne pas

    ORA-00933: la commande SQL ne se termine pas correctement
    00933. 00000 - "SQL command not properly ended"
    *Cause:
    *Action:
    Erreur à la ligne 6, colonne 23

    cependant je ne vois l'erreur qu'il peut y avoir dans le from

    Cordialement

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    C'est étrange
    peut être une erreur de copier coller car ça devrait fonctionner en l'état (sous réserve de vérification des noms de colonnes et de tables bien sur)
    EDIT : oups, j'ai ajouté un alias pour les besoin de la sous requete exists , du coup il faut aussi ajouter cet alias dans le select

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

Discussions similaires

  1. problème avec GROUP BY
    Par benjisan dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/06/2007, 11h48
  2. [XI] problème avec groupe sur un champ trié par origine ?
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 11/04/2007, 15h31
  3. Problème avec GROUP BY
    Par Korskarn dans le forum Langage SQL
    Réponses: 6
    Dernier message: 07/03/2006, 14h35
  4. Problème avec group by...
    Par gdido dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/07/2005, 09h34
  5. [débutant] problème avec Group by
    Par Amenofis dans le forum Débuter
    Réponses: 5
    Dernier message: 25/05/2005, 09h57

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