OK. La problématique change en effet ...
Donc il faut diviser la période choisie (dans ton exemple, décembre 2008) en x intervalles de temps.
J'arrive à la procédure ci-dessous :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| -- Variables à entrer
SET @debut_periode = '2008-12-01';
SET @fin_periode = '2008-12-31';
SET @nb_intervalles = 200;
-- Durée du point en secondes
SET @duree_point = (
SELECT ((DATEDIFF(@fin_periode, @debut_periode) + 1) * 86400) / @nb_intervalles
);
-- Sélection des valeurs et ordonnancement
CREATE TABLE hydrolink.tmp
SELECT sv_Date, sv_Value
FROM hydrolink.sensorsvalues
WHERE sv_Date BETWEEN @debut_periode AND @fin_periode
ORDER BY sv_Date;
-- Calcul et regroupement par point
SELECT CEILING(TIME_TO_SEC(TIMEDIFF(sv_Date, @debut_periode)) / @duree_point) AS Point,
AVG(sv_Value) AS Moyenne
FROM hydrolink.tmp
GROUP BY CEILING(TIME_TO_SEC(TIMEDIFF(sv_Date, @debut_periode)) / @duree_point); |
Explication
1)
TIMEDIFF(sv_Date, @debut_periode
Donne la différence, exprimée en hhh:mm:ss, entre la sv_date et la date choisie comme début de période.
Exemple :
SELECT TIMEDIFF('2008-12-03 00:00:00', '2008-12-01 00:00:00')
==> 48:00:00
2)
TIME_TO_SEC(TIMEDIFF(sv_Date, @debut_periode))
Convertit le calcul précédent en nombre de secondes.
Exemple :
SELECT TIME_TO_SEC(TIMEDIFF('2008-12-03 00:00:00', '2008-12-01 00:00:00'))
==> 172800
48 heures * 3600 secondes = 172 800 secondes.
3)
CEILING(TIME_TO_SEC(TIMEDIFF(sv_Date, @debut_periode)) / @duree_point)
On divise le résultat précédent par la durée du point et on arrondit à l'unité supérieure pour démarrer au point n° 1.
Pour changer les paramètres de date de début et de fin et de nombre de points, il suffit de changer les valeurs des variables en début de script.
A essayer.
Partager