Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Zeit zählen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von kasper027, 11 August 2013.

  1. kasper027

    kasper027 Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru


    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 ;-)
     
  3. kasper027

    kasper027 Neuer Benutzer

    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
     
  4. ukulele

    ukulele Datenbank-Guru

    Haben die Datensätze eine fortlaufende ID die hochgezählt wird? Dann wäre es auch mit MySQL recht simpel umzusetzen.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden