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

累積合計をリセットしますか?

    oos =1または0である連続する日のグループを識別する必要があります。これは、LAG関数を使用して、oos列がいつ変更されるかを見つけ、それを合計することで実行できます。

    with x (s_date,qty,oos,chg) as (
      select s_date,qty,oos,
             case when oos = lag(oos,1) over (order by s_date)
                    then 0
                    else 1
             end
      from stk
      )
    select s_date,qty,oos,
           sum(chg) over (order by s_date) grp
    from x;
    

    出力:

    |                         S_DATE | QTY | OOS | GRP |
    |--------------------------------|-----|-----|-----|
    | January, 01 2013 00:00:00+0000 |   0 |   1 |   1 |
    | January, 02 2013 00:00:00+0000 |   0 |   1 |   1 |
    | January, 03 2013 00:00:00+0000 |   0 |   1 |   1 |
    | January, 04 2013 00:00:00+0000 |   5 |   0 |   2 |
    | January, 05 2013 00:00:00+0000 |   0 |   1 |   3 |
    | January, 06 2013 00:00:00+0000 |   0 |   1 |   3 |
    

    次に、このoosを合計し、grp列で分割して、連続するoos日を取得できます。

    with x (s_date,qty,oos,chg) as (
      select s_date,qty,oos,
             case when oos = lag(oos,1) over (order by s_date)
                    then 0
                    else 1
             end
      from stk
      ),
    y (s_date,qty,oos,grp) as (
      select s_date,qty,oos,
             sum(chg) over (order by s_date)
      from x
      )
    select s_date,qty,oos,
           sum(oos) over (partition by grp order by s_date) cum_days_oos
    from y;
    

    出力:

    |                         S_DATE | QTY | OOS | CUM_DAYS_OOS |
    |--------------------------------|-----|-----|--------------|
    | January, 01 2013 00:00:00+0000 |   0 |   1 |            1 |
    | January, 02 2013 00:00:00+0000 |   0 |   1 |            2 |
    | January, 03 2013 00:00:00+0000 |   0 |   1 |            3 |
    | January, 04 2013 00:00:00+0000 |   5 |   0 |            0 |
    | January, 05 2013 00:00:00+0000 |   0 |   1 |            1 |
    | January, 06 2013 00:00:00+0000 |   0 |   1 |            2 |
    

    sqlfiddleでのデモ。



    1. MySQL-クエリの速度をテストするためにキャッシュを使用しないように強制する

    2. VBA基本クラスと派生オブジェクト-2

    3. スタースキーマ

    4. PythonによるSQLインジェクション攻撃の防止