Summe aller Messwerte pro Tag

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)
 
Werbung:
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.
 
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.
 
$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.
 
*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.
 
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"?
 
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.
 
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 ...
 
Werbung:
Zurück
Oben