Berechnung über Datenreihe incl. Differenzberechnung zu vorhergehendem Datensatz

norwegen60

Benutzer
Beiträge
12
Hallo zusammen,

ich habe eine Tabelle die im Wesentlichen aus einer Zeitspalte (Time), der aktuellen Leistung (Power) und der Leistungsquelle (Art) besteht.

Ich möchte nun die verbrauchte Energie über eine bestimmte Zeit per SQL berechnen und müsste dazu die einzelnen Verbräuche innerhalb des Zeitfensters summieren.
Also:

E = Summe(P * (T1 - T2)) where T between Zeitfenster

Mit

SELECT (LEAD(Zeitpunkt over (order by Zeitpunkt) - Zeitpunkt) * Power/360000 as Energy from PowerTable where Art = 10 order by Zeitpunkt

kann ich die Energieverbräuche der einzelnen Abschnitte berechnen. Leider schlägt aber das GroupBy fehl

SELECT Art, sum((LEAD(Zeitpunkt over (order by Zeitpunkt) - Zeitpunkt) * Power/360000) as Energy
from PowerTable
where (Art= 10) and (Zeitpunkt between '27.08.2023 00:00' and '28.08.2023 00:00')
group by Art


funktioniert nicht => "Fensterfunktionen können im Kontext einer anderen Funktion oder eines anderen Aggregats nicht verwendet werden."

Hat jemand eine Idee?

Grüße und Danke
Gerd
 
Werbung:
Du kannst das einfach zerlegen. Entweder schachteln, innen Window Function außen Group oder mit einer CTE (Common Table Expressen).

with w as (Select Window Function Statement)
select sum() from w group by

oder

select sum() from
(Select Window Function Statement) w
group by
 
Super!!

select sum(Energy) from
(SELECT id, (LEAD(ts) over (order by ts) -ts) * val/360000 as Energy
from ts_number
where (id = 10) ) w

group by id

liefert genau was ich wollte
So was hatte ich schon probiert, aber ohne das w. Verstehe nicht ganz, warum das benötigt wird

Den with habe ich nicht zum Laufen gebracht

with ts_number(id, Energy) as (
SELECT id, (LEAD(ts) over (order by ts) -ts) * val/360000 as Energy
from ts_number
where (id= 10)
)
select sum(Energy) from ts_number group by id


Habe es auch mit verschiedenen Arten mit w probiert

Danke
Gerd
 
Werbung:
aber ohne das w. Verstehe nicht ganz, warum das benötigt wird
Das W ist ein Table Alias, also ein Symbol / Nickname für einen Tabellenausdruck. Es kann genauso ein x sein oder SCHNURZ oder was auch immer ein gültiger Table Alias ist.

Den with habe ich nicht zum Laufen gebracht

with ts_number(id, Energy) as (
Schau Dir mal an, wie bei MS SQL Server ein CTE geschrieben wird.
Der Teil nach WITH ist ebenfalls eine Art Alias und dort gehören keine Klammern und Parameter hinein.
 
Zurück
Oben