探している合計を取得するには、関心のある値をグループ化する方法が必要です。いくつかのROW_NUMBER
を使用して、グループ化IDを生成できます。 キー値で分割された分析関数。ただし、KEY
を複製する必要があるため 列の値これは、いくつかの段階で実行する必要があります。
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;
上記のクエリは、キー値が変更されるたびに再起動するAMTの現在の合計を作成します。上記の最後のselectステートメントの代わりに使用された次のクエリは、要求された結果を提供しますが、これは現在の合計とは呼ばれません。
SELECT key2
, MIN(TIME) start_time
, MAX(TIME) stop_time
, sum(amt) amt
FROM t2
GROUP BY key2, gp;
フルタイムの値を表示するには、セッションのNLS_DATE_FORMAT
を変更することをお勧めします。 以下のように:
ALTER SESSION SET NLS_DATE_FORMAT='DD-MM-RRRR HH24:MI:SS';
または、各日付列をTO_CHAR
でラップします 出力用の関数。