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

月末に同じ期間を中断する

    次のように、再帰クエリを使用して「期間」数を計算できます。

    あなたの質問の下のコメントで表現されているように、私はあなたが「週」列で何を意味するのか完全には理解していません(そしてあなたの定義が実際に矛盾している可能性があると思います-明確にするためにあなたに任せます)。

    with
      r (plan, period, max_periods, start_date) as (
        select  plan, 1, max_periods, start_date
          from  table_1
        union all
        select  plan, period + 1, max_periods,
                least(start_date + 7, add_months(trunc(start_date, 'mm'), 1))
          from  r
          where period < max_periods
      )
    select plan, period, start_date
    from   r
    ;
    
    PLAN     PERIOD START_DATE
    ---- ---------- ----------
    A             1 2020-05-01
    A             2 2020-05-08
    A             3 2020-05-15
    A             4 2020-05-22
    A             5 2020-05-29
    A             6 2020-06-01
    A             7 2020-06-08
    A             8 2020-06-15
    A             9 2020-06-22
    A            10 2020-06-29
    A            11 2020-07-01
    A            12 2020-07-08
    

    これはTABLE_1の最大期間に基づいており、私はTABLE_2をまったく使用していません。 TABLE_1のみからこの結果セットを生成した後、2つのテーブルを結合するか、必要に応じてアプローチを適応させることができます。




    1. グループのサブグループにCOUNT関数を適用します

    2. PostgreSQLのバッファの大きさ

    3. jspのパスでデータベースからファイルを取得する

    4. 複数のテーブルを接続するためのトリガー