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 :

Regroupement et Moyenne


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 36
    Points : 27
    Points
    27
    Par défaut Regroupement et Moyenne
    Bonjour à tous,

    je ne trouve pas la solution malgré tous les exemples et aides sur le forum.
    Aprés plusieurs tests de query's je ne m'en sort pas.
    J'ai une centrale de mesure qui m'enregistre une ligne toutes les 2 secondes avec plusieurs valeurs de mesure de detecteurs (8 détecteurs dons 8 colonnes contenant des valeur de mesure en PPM)
    J'ai une table avec en première colonne des dates sous forme "Date & Heure" => par exemple "01/09/2015 05:00:00"
    Sur la seconde ligne et en premiere colonne j'aurais donc ""01/09/2015 05:00:02"

    J'aimerais via une query "Sql" ou "Vba" obtenir une moyenne de ces valeurs de mesure toutes les 15 min
    Une autre query "Sql" ou "Vba" pour obtenir cette fois-ci une moyenne des valeurs toutes les 8H00
    Tout ca pour au final obtenir des graph d'évolutions de ces mesures.

    Voici en exemple, l'extract de la table en format xlsx avec les données.
    Tbl_DATA.xlsx

    Par avance merci beaucoup à ceux qui pourront se penchez sur mon problème.
    Ludo

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    toutes les 15 min
    toutes les 8H00
    Je suppose que tu veux des tranches du types :

    00:00:00 à 00:14:59
    00:15:00 à 00:29:59

    et

    00:00:00 à 07:59:59
    08:00:00 à 17:59:59


    Je ne suis pas certain que ce soit la solution la plus efficace mais je ferai un champ calculé qui va déterminer dans quelle tranche ton heure courante tombes. Le plus simple me paraît de de travailler en secondes.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Tranche15mn:int(Heure([DateHeure])*3600 + Minute([DateHeure])*60 + Seconde([DateHeure])/(15*60)) * (15*60)

    cela va te donner la 1èr seconde de chaque tranche de 15 minutes. Une fois que tu as identifié tes tranches, il suffit de faire une requête de regroupement sur la tranche pour avoir tes moyennes.

    Même chose pour les 8 heures.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Tranche8h:int(Heure([DateHeure])*3600 + Minute([DateHeure])*60 + Seconde([DateHeure])/(8*3600)) * (8*3600)

    Note j'ai laissé les tranches sous la forme 15*60 et 8*3600 pour montrer le raisonnement mais on peux mettre soit la valeur déjà calculé soit un paramètres qui te permettrai d'avoir une seule requête pour toutes les tranches.

    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DureeTrancheEnS:( (heure([prmDureeTranche])*3600) + (Minute([prmDureeTranche])*60) + Seconde([prmDureeTranche]) )
    Tranche:int(Heure([DateHeure])*3600 + Minute([DateHeure])*60 + Seconde([DateHeure])/[DureeTrancheS]) * ([DureeTrancheEnS)
    Si tu veux économiser la conversion en seconde, tu peux utiliser les dates directement : la partie entière te donne le nombre de jour depuis je ne sais plus quelle date de référence et la partie décimale le nombre de centièmes de seconde depuis minuit.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 36
    Points : 27
    Points
    27
    Par défaut
    Bonjour

    Et Merci de l'intéret que tu portes à ma problèmatique.
    Je reviens sur ce besoin aprés un temps d'occupation.

    Je viens de faire un essai dans une base de test. C'est non Concluant car j'arrive bien à regrouper mais toutes les minutes et non tous les 1/4 d'heures

    Database test.7z

    Si je prends la logique je devrais créer une tranche toutes les 15 min : (15 min * 60 sec) soit toutes les 900 sec.
    Hors avec dans ton calcul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tranche15mn:int(Heure([DateHeure])*3600 + Minute([DateHeure])*60 + Seconde([DateHeure])/(15*60)) * (15*60)
    j'ai une tranche toutes les min qui passe à (15*60)*(15*60) soit 54000 seconde

    J'ai essayé de modifier ce calcul sql mais j'ai toujours des regourpements toutes les minutes et non toutes les 15 min.
    je ne dois pas avoir compris la logique.... "Icone : je suis un boulet"

    Par avance merci pour ton aide.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Je ne vois pas l'erreur.

    Je t'invite à mettre au point la formule dans Excel c'est un peu plus facile que dans Access.

    L'idée ce n'est pas d'avoir des tranches de x seconde mais avoir l'équivalent de la date et l'exprimées en seconde (et ceux par tranche de 15 minutes). Donc c'est la différence entre 2 valeurs qui va te de donner la tranche.

    Si je ne me trompe pas tu devrais pour
    • 00:00:00 à 00:14:59 avoir 0s,
    • 00:15:00 à 00:29:59 avoir (3600*0 + 15*60 + 0= 900s),
    • ...
    • 12:00:00 à 12:14:59 avoir 43200s
    • 12:15:00 à 12:29:59 avoir 44100s


    Le int(/(15*60)) va te donner le nombre de tranches et la *(15*60) va te redonner le nombre de secondes depuis 00:00:00 arrondi à la tranche.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 36
    Points : 27
    Points
    27
    Par défaut
    Bonsoir René,

    merci pour ton aide précieuse.
    et bien avec cette requête j'obtiens des tranches toutes les minutes de 54000. (donc 0 puis 54000 à 01:01, puis 108000 à 02:01 et ainsi de suite...)

    je n'ai pas vraiment compris la logique.

    Database test.7z

    Saurais-tu me faire un exemple avec cette base jointe ?
    elle est accdb, je peux te la transformer en mdb selon ta version d'access.

    Le but est de faire de moyennes de mesures CO toutes les 15 min et 08H00 pour faire ensuite des courbes de suivi d'évolution.

    Par avance merci encore pour l'aide et les explications apportées.

    Bonne soirée.

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 282
    Points : 19 479
    Points
    19 479
    Billets dans le blog
    64
    Par défaut
    Bonsoir,

    Comme indiqué par marot, le nombre de tranche (0,1,2,3...) est donnée par la 1ère partie de sa formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tranche15mn: Int((Heure([F1])*3600+Minute([F1])*60+Seconde([F1]))/(15*60))
    après que tu multiplies ou pas par (15*60) tu auras quand même le regroupement par tranche de 15min:

    Si tu veux vraiment un meilleur affichage, tu peux par exemple, créer 2 champs :

    un pour le début de la tranche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TrancheD: Int((Heure([F1])*3600+Minute([F1])*60+Seconde([F1]))/(15*60))*15
    et un pour la fin de la tranche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TrancheF: (Int((Heure([F1])*3600+Minute([F1])*60+Seconde([F1]))/(15*60))+1)*15
    Mais pour moi la formule de départ de marot suffit pour réaliser le regroupement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tranche15mn: Int((Heure([F1])*3600+Minute([F1])*60+Seconde([F1]))/(15*60))
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 36
    Points : 27
    Points
    27
    Par défaut
    Aprés plusieurs semaines noyé sous le travail, je reprends enfin ce point.
    Un énorme Merci à vous deux !!!!!
    Il reste toutefois une erreur de paranthèse sur la proposition de maro qui génére un mauvais groupement.
    La correction apportée ci-dessus convient parfaitement. Merci a vous deux.

    Une dernière question, mon groupement commence logiquement avec ces requètes à 00:00:01 pour les tranches de 08H.
    Comme mes techniciens commencent leur job à 05H00 du matin puis ensuite à 13H00 et 21H00, comment puis-je décaler le début de mon groumement de 08H et commencer les moyennes qu'a partir de 05H00 du matin ?

    Par avance merci

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2010
    Messages : 36
    Points : 27
    Points
    27
    Par défaut
    Bon et bien je penses avoir trouvé une solution pour commencer mon regroupement à partir de 05H00 du matin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int(((Hour([F1])*3600+Minute([F1])*60+Second([F1]))+10800)/(8*3600))*(8*3600)
    Je viens de soustraire 10800 seconde soit 3H x 3600 sec afin de décaler mon heure de départ à 08H00 - 03H00 = 05H00
    j'ai donc mes tranches de :
    - 05H00 à 13H00
    - 13H00 à 21H00

    Par contre comme la premiere colonne de ma requete est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dates: (Format([F1];"Short Date"))
    J'ai donc entre 2 dates différentes :
    - une moyenne de 21H00 à 23H59
    - puis une moyenne de 00H01 à 04H59
    j'ai donc 2 lignes pour une même tranche de 08H00 car deux dates différentes

    Nom : Capture.JPG
Affichages : 155
Taille : 43,4 Ko

    Une idée ?
    Je penses devoir travailler sur cette colonne de date mais comment tout imbriqué correctement ?

    merci

Discussions similaires

  1. [VBA EXCEL] regroupement et moyenne automatique
    Par ancel17 dans le forum Excel
    Réponses: 1
    Dernier message: 12/07/2007, 17h50
  2. Regroupement par mois
    Par fplanglois dans le forum SQL
    Réponses: 7
    Dernier message: 29/07/2003, 16h32
  3. Regrouper 3 requêtes dans une seule
    Par LadyArwen dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/06/2003, 09h32
  4. regrouper deux tables
    Par Shabata dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/05/2003, 15h02
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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