Minuten berechnen innerhalb einer Tabelle

Der Name der Tabelle, hier Item22, ist das Gerät. Eine weitere Tabelle (Items) hat die Bezeichnung der einzelnen Geräte also Item22 | Lampe Wohnzimmer, Item23 | Lampe Küche, usw. Für jedes Gerät gibt es eine eigene Tabelle. Sieht komisch aus
... und verstößt gegen die Regeln von SQL. Da fällt mir eigentlich nur eines ein: ab in die Tonne. Nein, nicht die grüne, sondern die für Schadstoffe.
 
Werbung:
Wie das ganze aufgebaut ist, das macht keinen Sinn. Es gibt sicherlich Möglichkeiten, das auseinaderzubröseln.

Ich gebe dir recht das es keinen Sinn macht aber wie vorher schon geschrieben kann ich hier keine Änderungen vornehmen da Smart Home die Werte so abspeichert. Ich habe aber nach etlichen Versuchen endlich eine Lösung gefunden:

PHP:
select Month(Time) as Monat, Year(Time) as Jahr, value,  Sum((TIMESTAMPDIFF(minute, Time, OffTime))) as an
FROM
(
SELECT Time, Value
,(SELECT Time FROM `Item22` as b WHERE b.Time > a.Time AND b.Value="OFF" ORDER BY Time LIMIT 1) as OffTime

FROM `Item22`  as a
WHERE Value ="ON"

)

as Blupp
GROUP BY Month(Time), Year(Time)

Viele Grüße
Torsten
 
Du selektiert 4 Spalten (gleich erste zeile), davon die 4. Spalte aggregiert (sum), hast dann aber nur nach 2 Spalten gruppiert. Das ist logisch falsch, MySQL erkennt es aber nicht und liefert Dir mehr oder weniger zufällige Ergebnisse, die in Deinem Sinne richtig sein können - oder aber auch falsch.

MySQL wird sich ab 5.7 (?) ähnlich wie PostgreSQL verhalten:

Code:
test=*# create table bla( a int, b int, c int, d int);
CREATE TABLE
test=*# select a, b, c, sum(d) from bla group by a, b;
ERROR:  column "bla.c" must appear in the GROUP BY clause or be used in an aggregate function at character 14
STATEMENT:  select a, b, c, sum(d) from bla group by a, b;
ERROR:  column "bla.c" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select a, b, c, sum(d) from bla group by a, b;
  ^
test=*#
 
Danke für die schnelle Antwort. so wie du es schreibst ist es in der tat logisch ;-)
Wäre es so richtig:
PHP:
test=*# select a, b, sum(d) from bla group by a, b;
 
Werbung:
Zurück
Oben