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

デコード機能の代替

    これは、指定された日付と日付 + 5 の間の休日の日付の数をカウントする単純なサブクエリで実現できます。以下は、将来の休日以外の 5 日間の日付を返します:

    testdate+(select 5+count(1) 
                from holiday
               where holidaydate between testdate
                                     and testdate + 5)
      

    評価期間を変更するには、両方の「5」を別の数字に変更するだけです。

    SQLFiddle はこちら

    編集 - 以下のコメントに基づいて、私のコードは 5 日目以降は評価されません。これはおそらく関数を使用する方がはるかに簡単ですが、次の cte ベースのコードも機能します:

    with cte as ( (select alldate,holidaydate 
                     from (select to_date('20130101','yyyymmdd')+level alldate 
                             from dual 
                           connect by level < 10000 -- adjust for period to evaluate
                          ) alldates 
                          left join holiday on alldate=holidaydate) )
    select 
        testdate,test_plus_five
    from ( 
        select 
            alldate test_plus_five,testdate,
            sum(case when holidaydate is null 
                     then 1 
                     else 0 end) over (partition by testdate order by alldate) lastday 
        from 
            cte,
            testdates
        where
            alldate >= testdate
        group by
            alldate,holidaydate,testdate)
    where
        lastday = 6   
      

    このスクリプトは、カレンダー テーブルを作成して、毎日 (休日または非休日) を評価できるようにします。次に、非休日の連続カウントを取得し、6 番目の日付を使用します。

    SQLFiddle はこちら



    1. pg-v0.17.1のインストール

    2. 日付を事前定義された形式と比較するplsql

    3. 別のフィールドで最大日付順のデータを選択します

    4. Oracle.NETエラー-引数の数またはタイプが間違っています