Partage
  • Partager sur Facebook
  • Partager sur Twitter

récup du maxi et de l' heure de chaque jour

14 octobre 2018 à 14:01:20

Bonjour

j'ai une table "archive"et sur cette table est fait un enregistrement toutes les 5 minutes. les champs que je veux récupérer sont le max de la température de chaque jour et la date et l'heure associé à cette valeur maxi. un aperçu de ma table :

pour récupérer ces infos j'essai cette requête qui me donne bien le maxi de chaque jour mais pas du tout l'heure qui correspond à la valeur maxi.

SELECT `recdateTZ`,periode,   MAX(temp_out) as temp_max FROM archive  GROUP BY  periode

voici ce que j'obtiens avec cette requête :

sur le recdateTZ, l'heure est à zéro. 

si quelqu'un pouvez m'apporter la solution

merci

  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2018 à 16:58:36

pas de solution ? pas de direction non plus où chercher ?
  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2018 à 17:30:19

Bonjour,

personnellement je n'essaierais pas de faire ça en une seule requête.

Je ferais une première requête pour récupérer tous les jours (DISTINCT).

Puis une requête préparée qui va chercher la ligne ou temp_out=max(temp_out).

Tu bindes les variables avec bindParam, et tu boucles l'execute sur les jours.

  • Partager sur Facebook
  • Partager sur Twitter
15 octobre 2018 à 19:29:14

J'ai modifié la structure du champ "periode " en DATETIME puis avec cette requête j'obtiens quasi ce que je voudrai :

SELECT CAST(t.`periode` AS DATE) AS dateMesure, CAST(t.`periode` AS TIME) AS heureMesure, t.`temp_out` FROM archive
 t INNER JOIN ( SELECT CAST(t2.`periode` AS DATE) AS dateMesure, MAX(t2.`temp_out`) AS max_temp FROM archive
  t2 GROUP BY CAST(t2.`periode` AS DATE) ) r ON CAST(t.`periode` AS DATE) = r.dateMesure AND t.`temp_out` = r.max_temp

par contre le soucis c'est que dans un jours, comme la journée du 4/10/2018, j'ai 3 fois 22.4 qui s'affiche, il faudrait que se soit juste le premier 22.4 qui s'affiche

en rajoutant "DISTINCT" c'est pareil, toujours des valeurs date, heure, qui se repete

SELECT DISTINCT CAST(t.`periode` AS DATE) AS dateMesure, CAST(t.`periode` AS TIME) AS heureMesure, t.`temp_out` FROM archive t INNER JOIN ( SELECT DISTINCT CAST(t2.`periode` AS DATE) AS dateMesure, MAX(t2.`temp_out`) AS max_temp FROM archive t2 GROUP BY CAST(t2.`periode` AS DATE) ) r ON CAST(t.`periode` AS DATE) = r.dateMesure AND t.`temp_out` = r.max_temp



-
Edité par lucasdom 15 octobre 2018 à 21:06:34

  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2018 à 10:14:00

Salut, t'as essayé d'ajouter à la fin de ta requete, un GROUP BY dateMesure  ?

-
Edité par Romuald44 16 octobre 2018 à 10:14:14

  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2018 à 10:20:29

Salut, il me semble que GROUP BY y est déjà avec datemesure et temp_out
  • Partager sur Facebook
  • Partager sur Twitter