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

Requêtes et SQL. Discussion :

Requête pour sélectionner les lignes groupées en testant la valeur max d'une colonne


Sujet :

Requêtes et SQL.

  1. #1
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut Requête pour sélectionner les lignes groupées en testant la valeur max d'une colonne
    bonsoir

    j'ai une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TYPE_RISK_P1_Str AS TYPE_RISK, GRAVITE_Int AS G,COUNT(GRAVITE_Int) AS NB, TYPE_RISK_P1_Str + "("+cstr(COUNT(GRAVITE_Int))+")"  AS LIB
    FROM Array1z
    WHERE ( TYPE_RISK_P2_Int >0  AND GRAVITE_Int>0)
    GROUP BY   TYPE_RISK_P1_Str,  GRAVITE_Int
    j'obtiens une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TYPE RISK    G      NB    LIB
    risque 1        1      2     risque 1 -  2
    risque 1        2      4     risque 1 -  4
    risque 1        3      7     risque 1 -  7
    risque 2        1      4     risque 2  - 4
    risque 2        3      2     risque 2  - 2
    risque 3        2      4     risque 3  - 4
    risque 4        1      9     risque 4  - 9
    risque 4        2      4     risque 4  - 4
    je voudrais sélectionner les lignes de valeur max G pour chaque TYPE RISK :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TYPE RISK    G      NB    LIB
    risque 1        3      7     risque 1 -  7
    risque 2        3      2     risque 2  - 2
    risque 3        2      4     risque 3  - 4
    risque 4        2      4     risque 4  - 4
    J'ai essayé en ajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING GRAVITE_Int = MAX(GRAVITE_Int)
    mais çà ne marche pas...

    Qui peut m'aider ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 855
    Points : 14 966
    Points
    14 966
    Par défaut
    Bonsoir,
    tu dois passer par une sous-requête si tu veux t'en sortir :
    la première requète sélectionne le max de chaque occurence, je l'ai nommé req1Array1z_sr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Array1z.TYPE_RISK_P1_Str, Max(Array1z.GRAVITE_Int) AS MaxDeGRAVITE_Int
    FROM Array1z
    WHERE (((Array1z.TYPE_RISK_P2_Int)>0) AND ((Array1z.GRAVITE_Int)>0))
    GROUP BY Array1z.TYPE_RISK_P1_Str;
    la seconde afffiche le résultat final en utilisant la sous-requête pour sélectionner chaque valeur max de Gravite_int:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Array1z.TYPE_RISK_P1_Str AS TYPE_RISK, Array1z.GRAVITE_Int AS G, Count(Array1z.GRAVITE_Int) AS NB, [Array1z].[TYPE_RISK_P1_Str]+"("+CStr(Count([GRAVITE_Int]))+")" AS LIB
    FROM Array1z INNER JOIN req1Array1z_sr ON (Array1z.GRAVITE_Int = req1Array1z_sr.MaxDeGRAVITE_Int) AND (Array1z.TYPE_RISK_P1_Str = req1Array1z_sr.TYPE_RISK_P1_Str)
    WHERE (((Array1z.TYPE_RISK_P2_Int)>0) AND ((Array1z.GRAVITE_Int)>0))
    GROUP BY Array1z.TYPE_RISK_P1_Str, Array1z.GRAVITE_Int;
    Sinon, en une seule requête c'est possible en faisant du bricolage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Array1z.TYPE_RISK_P1_Str AS TYPE_RISK, Array1z.GRAVITE_Int AS G, Count(Array1z.GRAVITE_Int) AS NB, TYPE_RISK_P1_Str+"("+CStr(Count(GRAVITE_Int))+")" AS LIB
    FROM Array1z
    WHERE (((Array1z.TYPE_RISK_P2_Int)>0) AND ((Array1z.GRAVITE_Int)>0))
    GROUP BY Array1z.TYPE_RISK_P1_Str, Array1z.GRAVITE_Int
    HAVING (((Max([TYPE_RISK_P1_Str] & Format(([GRAVITE_Int]),"00000"))) In (select  [TYPE_RISK_P1_Str] & Max(Format([GRAVITE_Int],"00000")) from Array1z group by TYPE_RISK_P1_Str)));

  3. #3
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    Millle Merci tee_grandbois !
    C'est nickel !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/03/2013, 19h24
  2. Réponses: 1
    Dernier message: 07/06/2006, 19h56
  3. Une requête pour éditer plusieurs lignes.
    Par Anduriel dans le forum Requêtes
    Réponses: 3
    Dernier message: 02/05/2006, 21h24
  4. requête pour exclure les doublons.
    Par sam01 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2005, 20h10
  5. sélectionner les lignes différentes entre 2 tables
    Par PAYASS59 dans le forum Requêtes
    Réponses: 2
    Dernier message: 19/09/2005, 15h05

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