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

すべての顧客オラクルの日付列から間違った次の日付を取得する

    ウィンドウ句は last_effective_dates を見ています すべてのデータにわたって。 partition by を追加する必要があります 現在の顧客に限定する句:

      OVER (PARTITION BY nm.CUSTOMER_ID
            ORDER BY nm.LATEST_EFFECTIVE_DATE
            RANGE BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
    

    そう:

      SELECT NM.CUSTOMER_ID customer_id,
         NM.LATEST_EFFECTIVE_DATE start_date,
         NVL (
            CASE
               WHEN nm.LATEST_EFFECTIVE_DATE IS NULL
               THEN
                  TO_DATE ('12/12/9999', 'dd/mm/yyyy')
               ELSE
                  FIRST_VALUE (
                     nm.LATEST_EFFECTIVE_DATE)
                  OVER (PARTITION BY nm.CUSTOMER_ID
                        ORDER BY nm.LATEST_EFFECTIVE_DATE
                        RANGE BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING)
            END,
            TO_DATE ('12/12/9999', 'dd/mm/yyyy'))
            end_date,
         NM.PRESENT_QUANTITY PRESENT_quantity
    FROM nm_cust_appliance_history nm
    WHERE NM.APPLIANCE_INFO_ID = 10484
    ORDER BY customer_id, start_date;
    

    複数の appliance_info_id に対して実行する必要がある場合 次に、それを partition by clause に追加する必要があります

    ダミーの追加レコードを使用して、CTE を介して提供される、表示されているものをシミュレートします:

    with nm_cust_appliance_history(appliance_info_id, customer_id, latest_effective_date, present_quantity) as (
      select 10484, 96, date '2009-12-20', 10 from dual
      union all select 10484, 96, date '2014-11-18', 12 from dual
      union all select 10484, 96, date '2015-11-26', 14 from dual
      union all select 10484, 42, date '2009-12-21', 15 from dual
    )
    

    元のクエリは次のようになります:

    CUSTOMER_ID START_DATE END_DATE   PRESENT_QUANTITY
    ----------- ---------- ---------- ----------------
             42 2009-12-21 2014-11-18               15
             96 2009-12-20 2009-12-21               10
             96 2014-11-18 2015-11-26               12
             96 2015-11-26 9999-12-12               14
    

    上記の partition-by クエリは次を取得します:

    CUSTOMER_ID START_DATE END_DATE   PRESENT_QUANTITY
    ----------- ---------- ---------- ----------------
             42 2009-12-21 9999-12-12               15
             96 2009-12-20 2014-11-18               10
             96 2014-11-18 2015-11-26               12
             96 2015-11-26 9999-12-12               14
    



    1. Oracleにルート要素がないclobのxmlルート要素を作成します

    2. PostgreSQL内のJSON機能の概要

    3. mysql挿入プロシージャから挿入IDを取得します

    4. Hibernateのテーブル間に複数の1対多の関係を指定する