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 :

Extraction de max/min/moy dans une requete


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Points : 67
    Points
    67
    Par défaut Extraction de max/min/moy dans une requete
    Bonjour,

    J'ai une requête de sélection qui me permet de choisir des enregistrements dans une table pour afficher dans un sous form (en fonction de l'enregistrement du form maitre), ca fonctionne

    Dans cette requête je voudrais créer des champs de min/max/moy pour les afficher dans le pied de mon sous form (si ca gène je peux les mettre dans le pied du form principal)

    J'ai modifié ma requête en créant les champs mais bien sur il me prend le min/max/moy de chaque enregistrement au lieu de me prendre celui de tous les enregistrements....

    Donc ma question est de savoir si ce que je veux faire est possible ou s'il me faut une autre requête ?

    Voila mon SQL

    Code sql : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    SELECT tblstintdata.refstint,
           tblstintdata.s1,
           tblstintdata.s2,
           tblstintdata.s3,
           tblstintdata.laptime,
           tblstintdata.[c60/sc/rf/ol/il],
           Min(tblstintdata.s1)      AS MinS1,
           Min(tblstintdata.s2)      AS MinS2,
           Min(tblstintdata.s3)      AS MinS3,
           Min(tblstintdata.laptime) AS MinLaptime,
           Avg(tblstintdata.s1)      AS MoyS1,
           Avg(tblstintdata.s2)      AS MoyS2,
           Avg(tblstintdata.s3)      AS MoyS3,
           Avg(tblstintdata.laptime) AS MoyLaptime,
           Max(tblstintdata.s1)      AS MaxS1,
           Max(tblstintdata.s2)      AS MaxS2,
           Max(tblstintdata.s3)      AS MaxS3,
           Max(tblstintdata.laptime) AS MaxLaptime
    FROM   tblstint
           INNER JOIN tblstintdata
                   ON tblstint.refstint = tblstintdata.refstint
    GROUP  BY tblstintdata.refstint,
              tblstintdata.s1,
              tblstintdata.s2,
              tblstintdata.s3,
              tblstintdata.laptime,
              tblstintdata.[c60/sc/rf/ol/il]
    HAVING
    ( ( ( tblstintdata.refstint ) = [Formulaires].[frmstint].[refstint] )
      AND ( ( tblstintdata.[c60/sc/rf/ol/il] ) = Isnull([c60/sc/rf/ol/il]) ) );

    Merci de votre aide

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    GROUP  BY tblstintdata.refstint,
              tblstintdata.s1,
              tblstintdata.s2,
              tblstintdata.s3,
              tblstintdata.laptime,
              tblstintdata.[c60/sc/rf/ol/il]

    Dans une table qui contient l'identité de personnes (nom, prénom, ...), si tu tentes de regrouper les personnes par nom, prénom, année de naissance, adresse... le GROUP BY du SQL va former les groupes de personnes qui ont le même nom et le même prénom et la même année de naissance et la même adresse. Il y a des chances que chacun de ces groupes ne contiennent qu'une seule personne (à moins de doublons fâcheux dans la table, et on vient de trouver un moyen de les repérer).

    Dans l'intention, je suppose qu'il faut revoir le GROUP BY, mais ne connaissant pas la signification de ces champs, je ne saurais dire pour l'instant comment opérer les regroupements...

    Si le groupe concerne tous les enregistrements de la table, essaie en supprimant la clause GROUP BY.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    HAVING
    ( ( ( tblstintdata.refstint ) = [Formulaires].[frmstint].[refstint] )
      AND ( ( tblstintdata.[c60/sc/rf/ol/il] ) = Isnull([c60/sc/rf/ol/il]) ) );
    Ici, il faut filtrer les lignes de la table avec un WHERE :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE
    ( ( ( tblstintdata.refstint ) = [Formulaires].[frmstint].[refstint] )
      AND ( ( tblstintdata.[c60/sc/rf/ol/il] ) = Isnull([c60/sc/rf/ol/il]) ) );

  3. #3
    Membre du Club
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Points : 67
    Points
    67
    Par défaut
    Alors je tâtonne mais je ne comprends pas ce que je fais....

    Je peux supprimer la table tblstint qui me sert à rien vu que tous les champs sortent de tblstintdata.

    Je comprends la logique des groupes nom ET prenom ET date de naissance donc la j'ai fait une erreur mais je n'arrive pas à lui dire de me sortir le MIN de S1 de TOUS les enregistrements de la requête et pas de chaque ligne, parce que le min de chaque S1 c'est S1

    refstint est la référence qui renvoie vers le form principal pour mon sous form, si dans le form principal j'affiche la session 1 la requête me sort tous les enregistrements qui renvoient à cette session donc je pense que la logique est bonne, la condition estnull fonctionne aussi car j'ai besoin de ne pas prendre en compte les enregistrements qui ont cette case à cocher.

    Si je supprime le group by j'ai une erreur comme quoi ma requête n'inclut pas l'expression "refstint" qui est spécifié comme partie d'une fonction d'agrégation, alors que c'est un champ qui existe dans la table tblstintdata.

    S1 S2 S3 et laptime sont des valeurs que je saisis donc pas de souci la dessus.

    Mais je suis bloqué....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TblStintData.refstint, TblStintData.S1, TblStintData.S2, TblStintData.S3, TblStintData.Laptime, TblStintData.[C60/SC/RF/OL/IL], Min(TblStintData.S1) AS MinS1, Min(TblStintData.S2) AS MinS2, Min(TblStintData.S3) AS MinS3, Min(TblStintData.Laptime) AS MinLaptime, Avg(TblStintData.S1) AS MoyS1, Avg(TblStintData.S2) AS MoyS2, Avg(TblStintData.S3) AS MoyS3, Avg(TblStintData.Laptime) AS MoyLaptime, Max(TblStintData.S1) AS MaxS1, Max(TblStintData.S2) AS MaxS2, Max(TblStintData.S3) AS MaxS3, Max(TblStintData.Laptime) AS MaxLaptime
    FROM TblStint INNER JOIN TblStintData ON TblStint.refstint = TblStintData.refstint
    GROUP BY TblStintData.refstint, TblStintData.S1, TblStintData.S2, TblStintData.S3, TblStintData.Laptime, TblStintData.[C60/SC/RF/OL/IL]
    HAVING (((TblStintData.refstint)=[Formulaires].[frmstint].[refstint]) AND ((TblStintData.[C60/SC/RF/OL/IL])=IsNull([C60/SC/RF/OL/IL])));
    La j'ai enlevé la référence à la table tblstint qui ne servait à rien mais ca ne donne pas mieux, j'ai un MinS1 (et les autres) à chaque enregistrement de S1.

    Merci de votre aide

  4. #4
    Membre du Club
    Homme Profil pro
    team manager
    Inscrit en
    Juin 2015
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : team manager
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2015
    Messages : 191
    Points : 67
    Points
    67
    Par défaut
    Bon, j'ai fini par faire une requête qui va chercher min/max/moy dans les données de l'autre requête, je suis sur que c'est une solution toute pourrie mais j'ai rien trouvé de mieux pour le moment alors ca va faire l'affaire

    Merci des tuyaux dans tous les cas

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

Discussions similaires

  1. [AJAX] Extraction d'une partie HTML dans une requete Ajax
    Par Nabes dans le forum jQuery
    Réponses: 2
    Dernier message: 01/04/2013, 08h57
  2. [AC-2003] La fonction min dans une requete
    Par YVES69 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 19/11/2012, 21h00
  3. regroupement de tables dans une requete avec chiffre MAX
    Par db48752b dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 15/10/2009, 11h02
  4. extraction d'un "bout" de char dans une requete
    Par Nemerle dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/09/2006, 15h19
  5. Réponses: 3
    Dernier message: 24/10/2005, 16h59

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