For at få de beløb, du leder efter, har du brug for en måde at gruppere de værdier, du er interesseret i. Du kan generere et grupperings-id ved at bruge et par ROW_NUMBER
analytiske funktioner, en opdelt efter nøgleværdien. Men på grund af dit behov for at duplikere KEY
kolonneværdier dette skal gøres i et par trin:
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;
Ovenstående forespørgsel opretter en løbende sum af AMT, der genstarter hver gang nøgleværdien ændres. Hvorimod følgende forespørgsel brugt i stedet for den sidste select-erklæring ovenfor giver de ønskede resultater, som jeg ikke vil betegne som en løbende sum.
SELECT key2
, MIN(TIME) start_time
, MAX(TIME) stop_time
, sum(amt) amt
FROM t2
GROUP BY key2, gp;
For at se fuldtidsværdierne kan du enten ændre din session NLS_DATE_FORMAT
som nedenfor:
ALTER SESSION SET NLS_DATE_FORMAT='DD-MM-RRRR HH24:MI:SS';
Eller pak hver datokolonne ind i en TO_CHAR
funktion til outputformål.