Partage
  • Partager sur Facebook
  • Partager sur Twitter

Données sur une semaine

[HELP]

16 mai 2018 à 9:05:30

Bonjour tout le monde,

J'ai un arduino qui transmet ses données à une base de données j'aimerais obtenir un graphe des valeurs de la semaine. Donc pour cela j'aimerai faire la moyenne des valeurs de lundi, mardi, mercredi etc... Quelqu'un sait comment faire ?
SELECT AVG (champValeur) FROM TABLEDONNEES WHERE champDate = "date("Y")."-".date("m")."-".date("d")" AND champCapteur = capteurArduino

PS : j'ai déjà un graphe qui me permet d'afficher mes valeurs en fonction de leur heure

Respectueusement,

  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2018 à 10:07:13

Bonjour,

Quel SGBD utilises-tu ?

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
16 mai 2018 à 10:41:09

Bonjour j'utilise MySQL avec phpMyAdmin
  • Partager sur Facebook
  • Partager sur Twitter
16 mai 2018 à 11:22:24

Bonjour,

Tu peux utiliser les fonctions DAYOFWEEK : https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dayofweek

La moyenne par jour de la semaine pour un capteur donné serait :

SELECT
	DAYOFWEEK( champDate ) AS jour,
	AVG(champValeur) AS moyenne
FROM TABLEDONNEES
WHERE champCapteur = 'capteurX'
GROUP BY DAYOFWEEK( champDate )

Attention ! 1 = Dimanche, 2 = Lundi, 3 = Mardi, etc.

-
Edité par Benzouye 16 mai 2018 à 11:23:01

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
16 mai 2018 à 11:36:46

Attention aussi à la plage de donnée. Si tu regarde juste sur une semaine ça va. Mais si tu veux la moyenne de chaque jour (lundi, mardi, etc...) mais sur un mois, alors la requète de Benzouye ne marchera pas, car elle fera la moyenne de tous les lundi, tous les mardi etc...

Dans ce cas, il faut faire un GROUP BY par jour, mais utiliser DAYOFWEEK dans le SELECT pour afficher de quel jour de la semaine il s'agit.

Mais comme je te l'ai dis dans ton précédent thread du forum, MySQL (et les SGBDR en général) ne sont pas fait pour manipuler des données horodaté. Si tu en a la possibilité, je te conseil vraiment de passer à une autre base de données, comme InfluxDB (qui possède un langage de requête très proche du SQL) qui permet justement de faire des requêtes complexes sur des plages temporelles.

  • Partager sur Facebook
  • Partager sur Twitter