sql >> データベース >  >> RDS >> Oracle

OracleSQLの時間に基づいたアイテムごとの繰り返しの合計

    探している合計を取得するには、関心のある値をグループ化する方法が必要です。いくつかの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でラップします 出力用の関数。



    1. データベースフィールドの空白はtrim()によって削除されません

    2. RedShift-改行付きのCSVロード

    3. SQLで外部キー制約を削除する方法

    4. PHPチェックMySQL最終行