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

Summe aller Messwerte pro Tag

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Mr.Aromat, 9 November 2018.

  1. akretschmer

    akretschmer Datenbank-Guru

    hier noch die Summen der letzten Tabelle je Tag:

    Code:
    test=*# select ts::date, sum(val) from aromat group by ts::date order by ts;
         ts     | sum
    ------------+-----
     2018-11-07 | 216
     2018-11-08 | 486
     2018-11-09 | 220
    (3 rows)
    
     
  2. Mr.Aromat

    Mr.Aromat Benutzer

    Ich habe nun eine andere Variante entdeckt, diese will aber auch nicht ganz funktionieren. Es muss sich iregendein Fehler eingeschlichen haben.

    Mein Befehl, um alle Werte eines Tages zu addieren, lautet:

    Code:
    $result = mysql_query("SELECT SUM(Messwert) FROM `Messwerte` WHERE SensorID = 'Sensor1' and DateTime>='2018-11-01' and DateTime<'2018-11-02'");
    Ich will beispielsweise mal alle Werte vom 1.11.18 addieren.

    Ich hoffe, ihr versteht was ich meine.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    deine DateTime - Spalte enthält was? Laß mich raten: Sekunden seit 1.1.1970. Du ermittelst also alle werte größer gleich 2018-11-1 = 2006 und kleiner 2018-11-2 = 2005. Da keine Zahl diese Forderungen erfüllt bekommst Du zwar ein korrektes Ergebniss - nur nicht das, was Du erwartest.

    lesson learned: korrekte Datentypen verwenden.
     
  4. Mr.Aromat

    Mr.Aromat Benutzer

    $result = mysql_query("SELECT SUM(Messwert) FROM `Messwerte` WHERE SensorID = 'T_INNEN' and DateTime>='1541026800'");

    Ich habe nun DateTime>= DateTime vom 1.11.18 gemacht, ich bekomme weiter keine Werte, jedoch gibt es auch keinen Fehler an.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    *shrug* Führe das SQL in der DB aus. Möglicherweise fragst Du in PHP den Fehler nicht ab. Außerdem ist die MySQL-Extension seit JAHREN deprecated und in aktuellen PHP-Versionen nicht verfügbar.
     
  6. Mr.Aromat

    Mr.Aromat Benutzer

    In der Datenbank hat diese Befehlszeile funktioniert. Jedoch habe ich die Vorgaben, beim "Endprodukt" dies direkt im Skript zu "filtern" und nicht direkt in der DB.

    Gäbe es dann eine andere Möglichkeit diesen "Tages-Filter zu setzen"?
     
  7. Mr.Aromat

    Mr.Aromat Benutzer

    Hallo ich will es nochmal versuchen:

    Nach langem Überlegen hatte ich folgende Idee:

    Code:
    for($x = time(); $x>='1538352000'; $x=$x-86400)  //x startet bei aktueller Zeit bis zum ersten Wert der DB und zählt tagesweise von x ab.
    {
    
      $y = $x + 86400;
      $result = mysql_query("SELECT * FROM `Messwerte` WHERE SensorID='Z_H' DateTime >= $x and DateTime < $y ");  /* Bei DateTime muss noch ein TimeStamp vom aktuellen Messwert rein. Jedoch will das nicht funktionieren*/
    
    
      while($row = mysql_fetch_array($result)) {
         $datum = $row['DateTime'];
         $value = round($row['Messwert'],2);
    
    
         $valuealt = $valuealt +$value; //Hier werden alle Werte von einem Tag summiert.
    
    }
    Hast du da eine Idee, wie ich das lösen könnte mit dem DateTime.
     
  8. akretschmer

    akretschmer Datenbank-Guru

    ja, richtige Datentypen nehmen und SQL lernen.

    Code:
    test=*# select * from aromat ;
                 ts             | val
    ----------------------------+-----
     2018-11-08 03:58:03.817343 |  15
     2018-11-07 17:19:16.863533 |  21
     2018-11-08 20:53:30.31198  |  96
     2018-11-09 05:13:42.023989 |  98
     2018-11-08 01:12:49.251688 |  25
     2018-11-07 18:05:36.255981 |  39
     2018-11-08 09:04:40.172358 |  45
     2018-11-08 11:00:30.383946 |  60
     2018-11-08 04:23:32.004347 |  20
     2018-11-07 18:14:14.978977 |  70
     2018-11-08 15:06:45.772723 |  22
     2018-11-09 06:14:10.775821 |   3
     2018-11-07 17:19:42.409803 |  86
     2018-11-09 03:33:29.925116 |  83
     2018-11-08 18:13:09.312385 |  53
     2018-11-08 09:26:24.350519 |  20
     2018-11-08 07:03:03.639414 |  60
     2018-11-08 20:25:58.252705 |   8
     2018-11-08 12:51:55.163137 |  62
     2018-11-09 13:11:05.221353 |  36
    (20 rows)
    
    test=*# select ts::date, avg(val) from aromat group by 1 order by 1;
         ts     |         avg         
    ------------+---------------------
     2018-11-07 | 54.0000000000000000
     2018-11-08 | 40.5000000000000000
     2018-11-09 | 55.0000000000000000
    (3 rows)
    
    test=*# select ts::date, sum(val) from aromat group by 1 order by 1;
         ts     | sum
    ------------+-----
     2018-11-07 | 216
     2018-11-08 | 486
     2018-11-09 | 220
    (3 rows)
    
    test=*# select ts::date, sum(val) from aromat where ts::date = '2018-11-09' group by 1 order by 1;
         ts     | sum
    ------------+-----
     2018-11-09 | 220
    (1 row)
    
    test=*#
    
    Was passendes dabei? Ich weiß nicht mehr genau, was Du abfragen willst ...
     
  9. Mr.Aromat

    Mr.Aromat Benutzer

    naja ich glaube das wird nichts ich habe zu wenig Erfahrung für sowas.
     
  10. akretschmer

    akretschmer Datenbank-Guru

    Dann nimm Dir ein Buch oder ein Tutorial. Aggregationen in Datenbanken ist so ziemlich gleich am Anfang, und in #21 sagtes Du, daß es in reinem SQL auch schon geht.
    PHP-Programmierung ist hier nicht das Thema.
     
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