Um die gesuchten Summen zu erhalten, müssen Sie die Werte gruppieren, an denen Sie interessiert sind. Sie können eine Gruppierungs-ID generieren, indem Sie ein paar ROW_NUMBER
verwenden Analysefunktionen, eine nach dem Schlüsselwert partitioniert. Allerdings müssen Sie den KEY
duplizieren Spaltenwerte muss dies in mehreren Schritten erfolgen:
WITH t1 AS (
SELECT dta.*
, last_value(KEY IGNORE NULLS) -- Fill in the missing
OVER (ORDER BY TIME ASC) key2 -- key values
FROM your_data dta
), t2 AS (
SELECT t1.*
, row_number() OVER (ORDER BY TIME) -- Generate a
- row_number() OVER (PARTITION BY key2 -- grouping ID
ORDER BY TIME) gp
FROM t1
)
SELECT t2.*
, sum(amt) OVER (PARTITION BY gp, key2
ORDER BY TIME) running_sums
FROM t2;
Die obige Abfrage erstellt eine laufende Summe von AMT, die jedes Mal neu gestartet wird, wenn sich der Schlüsselwert ändert. Wohingegen die folgende Abfrage, die anstelle der letzten select-Anweisung oben verwendet wird, die angeforderten Ergebnisse liefert, die ich nicht als laufende Summe bezeichnen würde.
SELECT key2
, MIN(TIME) start_time
, MAX(TIME) stop_time
, sum(amt) amt
FROM t2
GROUP BY key2, gp;
Um die Gesamtzeitwerte anzuzeigen, können Sie entweder Ihre Sitzung NLS_DATE_FORMAT
ändern wie unten:
ALTER SESSION SET NLS_DATE_FORMAT='DD-MM-RRRR HH24:MI:SS';
Oder umschließen Sie jede Datumsspalte mit einem TO_CHAR
Funktion für Ausgabezwecke.