Täglich/Wöchentlich Durchschnitt ermitteln

ahnungslos

Neuer Benutzer
Beiträge
1
Moin!
Vorab - bin noch recht frisch, was DB angeht.
Ich habe eine MySQL 8.0.30 DB in der ich jede Sekunde unterschiedliche Messwerte speicher.
Um die Werte über einen längeren Zeitraum vergleichen zu können, will ich zB Tagesdurchschnitt (00:00-23:59), Wochendurchschnitt (Montag 00:00 - Sonntag 23:59) etc. in jeweils einer separaten Tabelle hinterlegen.
Kurz zu meiner Struktur:
DB: "datalog" mit den zwei Tabellen "daily_avg" und "logging"

-logging
create_time--| Leistung_Gesamt | ....
timestamp---| float------------- | float...

-daily_avg
dateavg-----| avg_leistung_gesamt
timestamp--| float

Bei meiner Recherche habe ich dann eine ähnliche Fragestellung gefunden und das Event auf meinen Fall angepasst:

Code:
SELECT * FROM datalog.logging;
SET GLOBAL event_scheduler = ON;
CREATE EVENT st_leistung_avg_V3
on schedule AT current_timestamp() + interval + 1 Hour
DO
INSERT INTO `daily_avg`
   (`dateavg`, `avg_leistung_gesamt`)
  SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %h:00:00') , avg(`Leistung_Gesamt`)
  FROM   `logging`
  WHERE
  `create_time` BETWEEN DATE_FORMAT(NOW()  - INTERVAL 1 HOUR, '%Y-%m-%d %h:00:01') AND DATE_FORMAT(NOW(), '%Y-%m-%d %h:00:00');
show events

Resultat ist dann das (heute um 14 Uhr)
-dailyavg
Code:
dateavg              | avg_leistung_gesamt
---------------------+--------------------
2022-10-17 02:00:00  | NULL

Meine Frage:
Was habe ich falsch gemacht, dass da kein Durchschnittswert und 2Uhr Nachts steht?

Schon mal Danke im Voraus!
 
Zuletzt bearbeitet:
Werbung:
Hallo,

ich schreibe diverse Messwerte in eine DB und Frage aus Node-Red die Daten u. a. als Wochenwerte ab.
Auf der MariaDB habe ich eine Stored Procedure über welche ich mir die Daten aufbereitet liefern lassen.
Nachfolgend der Export der SP, vielleicht möchtest du dir davon was für deine Belange ableiten.

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Get_week_min_max_mittelwert`(IN `MO_id` INT, IN `MP_id` INT, IN `MG_id` INT)
READS SQL DATA
SELECT
MAX(Messwert) AS max_val,
MIN(Messwert) AS min_val,
FORMAT(AVG(Messwert),1) AS Mittelw, concat(year(Datum), '/', RIGHT(100 + week(Datum),2)) AS Woche
FROM
Messungen.Messwert
Where
Messort_id = MO_id AND Messpunkt_id = MP_id AND Messgroesse_id = MG_id
group by
year(Datum) DESC, week(Datum) DESC$$
DELIMITER ;


Viele Grüße

Martin
 
Werbung:
Zurück
Oben