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

Développement SQL Server Discussion :

faire un GROUP BY avec la fonction MAX()


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut faire un GROUP BY avec la fonction MAX()
    Bonjour,
    Je cherche désespérément la syntaxe d'une requête qui ne doit pas etre si difficile que cela mais qui me cause beaucoup de soucis.

    Voici la table :
    numero_contrat
    date
    type
    famille
    avenant
    ...

    Voici le contenu possible :
    numero de contrat date type famille avenant
    00000501 01/01/2008 N 54 1
    00000502 01/12/2008 Y 11 3
    00000502 02/12/2008 Y 12 5
    00000504 11/01/2008 N 14 8

    Ce que je cherche à avoir apres ma requete est ceci :
    numero de contrat date type famille avenant
    00000501 01/01/2008 N 54 1
    00000502 02/12/2008 Y 12 5
    00000504 11/01/2008 N 14 8

    Je cherche donc à avoir le numero d'avenant le plus haut pour chaque numero de contrat.

    J'ai donc essayé la requete suivante avec succes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT numero de contrat, MAX(avenant)
    FROM matable
    GROUP BY numero de contrat
    J'obtiens :
    numero de contrat avenant
    00000501 1
    00000502 5
    00000504 8

    le soucis c'est que je voudrais tout le contenu de l'enregistrement et pas seulement les deux champs.

    J'ai donc essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT numero de contrat, date, type, famille, MAX(avenant)
    FROM matable
    GROUP BY numero de contrat, date, type, famille
    mais à ce moment la, il me retourne tous les enregistrement ou presque, donc voila mon soucis, comment faire pour avoir tous les champs des enregsitrements ???

    Merci

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    j'ai teste chez moi avec une autre table. ca marche!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT tableavenant.numero de contrat,tableavenant.numero avenant max,table.date,table.famille,table.avenant FROM  (SELECT numero de contrat, MAX(avenant) as numero avenant max
    FROM matable
    GROUP BY numero de contrat) as TableAvenant INNER JOIN MaTable ON MaTable.Numero de contrat = TableAvenant.Numero de Contrat

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    merci pour ta reponse ylarvor

    malheureusement je ne comprends pas tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT numero de contrat,nbs avenant 
    FROM (SELECT numero de contrat, MAX(avenant) AS nbs avenant
    FROM matable
    GROUP BY numero de contrat) AS TableAvenant INNER JOIN TABLE ON TABLE.Numero de contrat = TableAvenant.Numero de Contrat
    "nbs avenant" qu'est ce que cela represente ?

    et je comprends pas ton INNER JOIN ? TABLE represente quelle table ??

    merci

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    RHAAAAA j'y arrive pas ! la loose !

    la table :
    PTF
    (
    DATE
    PD01_NO_CNT
    PD01_FAMPROD
    AVENANT
    PD01_MARQUE
    )

    je ne vois pas comment l'adapter à ta requete.

    Je n'ai qu'une seule table ...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    lorsque je fais la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT PTF.PD01_NO_CNT,nbs_avenant 
    FROM (SELECT PD01_NO_CNT, MAX(AVENANT) AS nbs_avenant
    FROM PTF
    GROUP BY PD01_NO_CNT) AS TableAvenant INNER JOIN PTF ON PTF.PD01_NO_CNT = TableAvenant.PD01_NO_CNT
    j'obtiens : 106690 lignes

    mais en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT PD01_NO_CNT, MAX(AVENANT) 
    FROM PTF
    GROUP BY PD01_NO_CNT
    j'obtiens 98189 lignes

    et dans la table : 106690 enregsitrements ! donc il y a un soucis

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/01/2009, 16h04
  2. Group by avec la fonction Max()
    Par dessinateurttuyen dans le forum SQL
    Réponses: 11
    Dernier message: 07/10/2008, 17h10
  3. requete SQl avec la fonction max () qui ne marche pas
    Par eclipse012 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2006, 14h32
  4. [Débutant / SQL] Requête avec la fonction MAX
    Par bugmenot dans le forum Access
    Réponses: 3
    Dernier message: 14/04/2006, 10h43
  5. Pb avec la fonction Max d'access
    Par abaad dans le forum Access
    Réponses: 1
    Dernier message: 03/04/2006, 17h43

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