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 :

Associer le nombre de valeurs par catégorie a une mesure [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Associer le nombre de valeurs par catégorie a une mesure
    Bonjour,

    Ceci est mon premier message et j'essaie de me former tout seul à access donc excusez moi s'il y a des maladresses.

    Ma base de donnée:
    Date; Code station; Mesure; Paramètre

    Je fais une requête de manière a avoir mes données entre 2000 et 2010, pour le paramètre Nitrate, ensuite j'ai besoin de sélectionner uniquement les stations pour lesquels il y a au moins 50 mesures sur cette période de 10 ans et c'est là ou je n'y arrive pas.

    Ce qui n'a pas marché:
    J'ai essayé de faire un regroupement avec une colonne compte sur nom de station et mettre le critère 50, simplement ma reqête me renvoie rien. (Je suppose que access ne peux pas regrouper par code station car il y a de multiple mesure par code station).

    Ce qui marche mais m'impose beaucoup d'étapes en plus sachant que je dois traiter une 10 aine de paramètre de la même façon:
    La seul solution que j'ai trouvé et de créer une autre table avec un champ code station et un champ compte pour la variable Mesure avec comme critêres supérieures a 50. Ca me renvoit les bonnes stations que je joint ensuite par l'attribut commun code station avec le fichier avec la sélection de 2000 à 2010 et le paramètre nitrate.

    Si quelqu'un a une idée de comment procéder, je suis preneur!

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 768
    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 768
    Points : 58 095
    Points
    58 095
    Billets dans le blog
    42
    Par défaut
    Bonjour,

    J’y vais par étape…

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CodeStation, Paramètre FROM LaTable
    WHERE Year([LaDate]) between 2000 AND 2010
    GROUP BY CodeStation, Paramètre
    HAVING Count(*)>=50

    On filtre les dates dans le WHERE.
    On regroupe par CodeStation et par Paramètre en ne retenant que les stations qui ont au moins 50 mesures pour chacun des paramètres.

    Dans un premier temps, c’est bien comme ça qu’il faut comprendre ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour la réponse.
    En effet en premier temps la requête que vous m'avez fournit me permet de trouver les stations respectant les paramètres (entre 2000 et 2010, le paramètre nitrate et les 50 mesures). J'ai juste rajouté le [Nom_parametre] = "Nitrates"

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT [Code_station],  [Nom_parametre] 
    FROM [Selection tous parametres]
    WHERE Year([Date_prelev]) BETWEEN 2000 AND 2010 AND [Nom_parametre] = "Nitrates"
    GROUP BY [Code_station], [Nom_parametre]
    HAVING Count(*)>=50

    Simplement il faudrait que j'arrive a afficher les nombreuses mesures du paramètre nitrate avec la date associée pour les stations sélectionnées par la requête précédente.
    Un ami qui à des notions en sql m'a proposé quelque chose comme ce qui suit mais le HAVING Count(*)>=50 ne marche pas avec le order by donc ça m'a l'air une mauvaise piste.


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Code_station], [Date_prelev], [Resultat_analyse]
    FROM [Selection tous parametres]
    WHERE Year([Date_prelev])  BETWEEN 2000 AND 2010 AND [Nom_parametre] = "Nitrates"
    ORDER BY [Code_station], [Date_prelev]

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 768
    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 768
    Points : 58 095
    Points
    58 095
    Billets dans le blog
    42
    Par défaut
    bonsoir,

    Citation Envoyé par Yonewbie
    …sachant que je dois traiter une 10 aine de paramètre de la même façon
    J’ai donc retiré le WHERE pour prendre en compte tous les paramètres

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT [Code_station],  [Nom_parametre] 
    FROM [Selection tous parametres]
    WHERE Year([Date_prelev]) BETWEEN 2000 AND 2010
    GROUP BY [Code_station], [Nom_parametre]
    HAVING Count(*)>=50

    Cette requête je la nomme [Requête1].

    Avec les assistants, tu construis une nouvelle requête :
    [Selection tous parametres]====== [Requête1]
    avec jointure sur les deux champs [Code_station] et [Nom_Paramètre] puis tu fais glisser les champs :
    [Code_station], [Date_prelev], [Nom_parametre] , [Resultat_analyse]


    Tu rajoutes un critère si nécessaire :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE [Nom_parametre] = "Nitrates"
    ou
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE [Nom_parametre] IN ("Nitrates", "bidule", "machintruc" )

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    D'accord merci beaucoup je ferais le test de jointure demain mais a priori ça devrait marcher ou du moins ça sera un autre problème...
    Je m'étais fait l'idée d'une requête qui me donnerait une réponse directe mais c'est vrai que la jointure me permet de faire le tri correctement.
    Ca progresse un peu c'est bien!

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Parlé trop vite
    Bonjour,

    Visiblement j'ai mis résolus bien trop vite hier soir.
    Lorsque je fais la jointure je me retrouve avec des dates hors de mon intervalle 2000-2010.

    J'inclus un petit aperçu de mes données.

    Mes données:
    ID Code_station Date_prelevement Nom_parametre Resultat_analyse
    1 06183500 01/01/1998 Nitrates 0,001
    " " " " "

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 768
    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 768
    Points : 58 095
    Points
    58 095
    Billets dans le blog
    42
    Par défaut
    bonjour,

    Citation Envoyé par f-leb Voir le message
    ...Cette requête je la nomme [Requête1].

    Avec les assistants, tu construis une nouvelle requête :
    [Selection tous parametres]====== [Requête1]

    avec jointure sur les deux champs [Code_station] et [Nom_Paramètre] puis tu fais glisser les champs :
    [Code_station], [Date_prelev], [Nom_parametre] , [Resultat_analyse]

    Tu rajoutes un critère si nécessaire :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE [Nom_parametre] = "Nitrates"
    ou
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE [Nom_parametre] IN ("Nitrates", "bidule", "machintruc" )
    j'ai oublié, il faut ajouter une nouvelle fois le critère sur la date:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ... AND Year([Date_prelev]) BETWEEN 2000 AND 2010

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    D'accord je comprends finalement la démarche. Et ça marche!
    Merci de votre aide

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

Discussions similaires

  1. [XL-2013] Moyenne du nombre de valeurs par date
    Par bolide7 dans le forum Excel
    Réponses: 3
    Dernier message: 27/12/2014, 12h14
  2. Réponses: 2
    Dernier message: 24/05/2013, 18h44
  3. compter le nombre de valeurs par tranche
    Par DiverSIG dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/02/2010, 17h03
  4. [MySQL] Extraire un nombre d'enregistrements par catégorie
    Par stelsej dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/11/2008, 19h19
  5. Réponses: 2
    Dernier message: 18/10/2003, 14h42

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