Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lissage de données

Paramètre : TimeStamp

    15 septembre 2021 à 10:49:50

    Bonjour à toutes et à tous, 

    Tout d'abord merci aux personnes qui vont lire ce post ainsi que pour votre aide.

    Dans une base de données, se trouvent une quantité assez conséquente de données : une valeur associée à un time_stamp :

    J'aimerai pouvoir visualiser ces données.

    L'utilisateur choisit donc les variables à afficher ainsi que la plage de temps qui l'intéresse, puis il valide.

    ** requêtes AJAX -> Contrôleur -> Modèle et donc requête SQL -> retour vers la Vue -> affichage des courbes ** : Ca fonctionne parfaitement.

    J'aimerais maintenant ajouter la possibilité de lisser les données (entre 1 point par minute jusqu'à 1 point par heure).

    Dans un souci de gain de temps, serait-il mieux :

    • de faire une requête SQL en demandant toutes les données, puis de les lisser dans le Contrôleur en JS ? (je sais faire)
    • de modifier la requête pour ne demander que les points qui m'intéressent ? 

    J'ai donc essayer cette requête (sans le 'BETWEEN debut AND fin' niveau plage de dates pour commencer) :

    SELECT GE_ALM_1, SUBSTR(CHAR(Time_Stamp), 1, 16)
    FROM `defauts` 
    GROUP BY GE_ALM_1, SUBSTR(CHAR(Time_Stamp), 1, 16)

    Ca ne marche pas, et je ne comprend pas vraiment la réponse..
    Quelqu'un aurait-il une piste d'évolution ?

    Cordialement, Nicolas

    • Partager sur Facebook
    • Partager sur Twitter
      16 septembre 2021 à 14:19:29

      A nouveau bonjour tout le monde

      Personne ne connaîtrait une méthode de requête SQL pour lisser des données ? 

      A bientôt, Nicolas

      • Partager sur Facebook
      • Partager sur Twitter
        16 septembre 2021 à 18:40:11

        Bonjour,

        Tout d'abord quand on numérote les noms de colonne ainsi c'est qu'il y a un problème de conception ...

        Selon moi tu aurais dû concevoir ton modèle en 2 tables :

        • GE_ALM ( id [pk], nom )
        • mesure ( id [pk], id_ge_alm [fk], valeur )

        Chaque case de ton tableau actuel devient une ligne de la table mesure, et chaque nom de colonne est en fait un enregistrement dans la table GE_ALM (à nommer correctement, je ne sais pas de quoi l'on parle ici) ...

        En plus cela te permettrait de ne stocker que les valeurs 1, et d'oublier les 0 ... gros gain de place et de simplification des requêtes après ... Sans parler de la facilité à rajouter un GE_ALM ou en supprimer un si besoin ...

        NicoMilleville a écrit:

        une méthode de requête SQL pour lisser des données ? 

        Pour commencer, que veux-tu obtenir ? La moyenne, la minimale, la maximale, la plus proche du créneau ?

        Ensuite pour générer tes créneaux, le plus simple selon moi c'est d'arrondir :

        SELECT
        	FROM_UNIXTIME( FLOOR( UNIX_TIMESTAMP( Time_Stamp ) / 900 ) * 900 ) AS creneau
        FROM ...

        Ici c'est pour 900 secondes (15 minutes), tu auras juste à faire varier le 900 avec ce que tu veux ...

        • Partager sur Facebook
        • Partager sur Twitter
        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

        Lissage de données

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown