Para obtener las sumas que busca, necesita una forma de agrupar los valores que le interesan. Puede generar un ID de agrupación utilizando un par de ROW_NUMBER
funciones analíticas, una dividida por el valor clave. Sin embargo, debido a su necesidad de duplicar la KEY
valores de columna, esto deberá hacerse en un par de etapas:
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;
La consulta anterior crea una suma acumulada de AMT que se reinicia cada vez que cambia el valor de la clave. Mientras que la siguiente consulta utilizada en lugar de la última declaración de selección anterior da los resultados solicitados, que no llamaría una suma acumulada.
SELECT key2
, MIN(TIME) start_time
, MAX(TIME) stop_time
, sum(amt) amt
FROM t2
GROUP BY key2, gp;
Para ver los valores de tiempo completo, es posible que desee modificar su sesión NLS_DATE_FORMAT
como a continuación:
ALTER SESSION SET NLS_DATE_FORMAT='DD-MM-RRRR HH24:MI:SS';
O envuelva cada columna de fecha en un TO_CHAR
función con fines de salida.