Zeit zählen

kasper027

Neuer Benutzer
Beiträge
2
Hallo zusammen,

ich möchte gerne ein kleines Projekt, welches ich als OpenSource-Code bekommen habe, erweitern.
Kurz zum Inhalt:
Ich habe meine gesamte Heizung erneuern müssen. Nun ist es so weit, dass sämtliche Ertäge, Verbräuche und Temperaturen in einer Datenbank minütlich gespeichert werden (dies ist der Standartfall, es kann aber auch unterschiedliche Zeitabstände geben).

Nun zu einer vollständigen Energetischen Auswertung zählen auch die elektrischen Leistungen der Pumpen. Die Pumpen werden ebenfalls minütlich mit abgefragt und wenn die Pumpe 1 an ist, wird eine 1 in die Datenbank geschrieben....

Nun zum eigendlichen Thema. Wie kann ich die die Pumpenlaufzeit anhand der "1" berechnen, wenn unterschiedliche Speicherabstände möglich sind? Die Zeiten, inklusice Datum, wird auch geloggt.

Finde leider nichts passendes zu diesem Thema.

Vielen Dank im Voraus

Kasper027
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.423
Hallo zusammen,

ich möchte gerne ein kleines Projekt, welches ich als OpenSource-Code bekommen habe, erweitern.
Kurz zum Inhalt:
Ich habe meine gesamte Heizung erneuern müssen. Nun ist es so weit, dass sämtliche Ertäge, Verbräuche und Temperaturen in einer Datenbank minütlich gespeichert werden (dies ist der Standartfall, es kann aber auch unterschiedliche Zeitabstände geben).

Nun zu einer vollständigen Energetischen Auswertung zählen auch die elektrischen Leistungen der Pumpen. Die Pumpen werden ebenfalls minütlich mit abgefragt und wenn die Pumpe 1 an ist, wird eine 1 in die Datenbank geschrieben....

Nun zum eigendlichen Thema. Wie kann ich die die Pumpenlaufzeit anhand der "1" berechnen, wenn unterschiedliche Speicherabstände möglich sind? Die Zeiten, inklusice Datum, wird auch geloggt.

Finde leider nichts passendes zu diesem Thema.

Vielen Dank im Voraus

Kasper027


Du hast also folgende Tabelle:

Code:
test=*# select * from pumpe;
id |        ts          | an
----+---------------------+----
  1 | 2013-08-12 08:00:00 | f
  2 | 2013-08-12 08:01:00 | f
  3 | 2013-08-12 08:02:00 | t
  4 | 2013-08-12 08:03:00 | t
  5 | 2013-08-12 08:04:00 | t
  6 | 2013-08-12 08:05:00 | t
  7 | 2013-08-12 08:06:00 | f
  8 | 2013-08-12 08:07:00 | f
  9 | 2013-08-12 08:08:00 | f
10 | 2013-08-12 08:09:00 | t
11 | 2013-08-12 08:12:00 | t
12 | 2013-08-12 08:20:00 | t
13 | 2013-08-12 08:21:00 | f
(13 rows)

Und willst jetzt je nach an / aus (ich verwende da BOOL, daher t und f für true und false) laufend die Zeiten addieren:

Code:
test=*# select id, ts, an, sum(dauer) over (partition by an order by ts) as laufzeit from (select *, ts - lag(ts) over (order by ts) as dauer from pumpe order by ts) foo order by ts;
id |        ts          | an | laufzeit
----+---------------------+----+----------
  1 | 2013-08-12 08:00:00 | f  |
  2 | 2013-08-12 08:01:00 | f  | 00:01:00
  3 | 2013-08-12 08:02:00 | t  | 00:01:00
  4 | 2013-08-12 08:03:00 | t  | 00:02:00
  5 | 2013-08-12 08:04:00 | t  | 00:03:00
  6 | 2013-08-12 08:05:00 | t  | 00:04:00
  7 | 2013-08-12 08:06:00 | f  | 00:02:00
  8 | 2013-08-12 08:07:00 | f  | 00:03:00
  9 | 2013-08-12 08:08:00 | f  | 00:04:00
10 | 2013-08-12 08:09:00 | t  | 00:05:00
11 | 2013-08-12 08:12:00 | t  | 00:08:00
12 | 2013-08-12 08:20:00 | t  | 00:16:00
13 | 2013-08-12 08:21:00 | f  | 00:05:00
(13 rows)

Das ist jetzt allerdings in PostgreSQL, MySQL kann das nicht. Aber wer seine komplette Heizung erneuen kann schafft dies sicher auch mit der Datenbank ;-)
 

kasper027

Neuer Benutzer
Beiträge
2
Ja so ungefähr habe ich mir das vorgestellt. Ich muss mal schauen, wann ich Zeit finde, mir dis genau anzischauen und zu erweitern. Ich bin auf der Heizungseite Zuhause. Deswegen ist/war dieses das kleinere problem. Mit dem logging habe ich halt bis jetzt ein fertiges script, wo ich aber bis jetzt nich nicht alles verstanden habe. Mal sehn, wie ich dieses einbeziehen kann....

Danke schonmal
Ich werde bei Gelegenheit berichten
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.423
Haben die Datensätze eine fortlaufende ID die hochgezählt wird? Dann wäre es auch mit MySQL recht simpel umzusetzen.

Man könnte es auch anders lösen: einfach so wie es jetzt ist, und dazu einen TRIGGER, der bei jedem INSERT in einer extra Tabelle die Zeit halt dazuaddiert. Wenn das irgendwann signifikant viele Datensätze sind ist es eher unhandlich, nach 10 Jahren bei jeder Anfrage alle Datensätze durchzuklappern. Kommt aber auch drauf an, wozu das alles dienen soll.
 
Oben