これは、指定された日付と日付 + 5 の間の休日の日付の数をカウントする単純なサブクエリで実現できます。以下は、将来の休日以外の 5 日間の日付を返します:
testdate+(select 5+count(1) from holiday where holidaydate between testdate and testdate + 5)
プレ>評価期間を変更するには、両方の「5」を別の数字に変更するだけです。
編集 - 以下のコメントに基づいて、私のコードは 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 番目の日付を使用します。