यह एक साधारण सबक्वेरी के साथ प्राप्त किया जा सकता है जो एक निर्दिष्ट तिथि और दिनांक +5 के बीच अवकाश तिथियों की संख्या की गणना करता है। निम्नलिखित एक तारीख लौटाएगा जो भविष्य में पांच गैर-अवकाश दिनों की होगी:
testdate+(select 5+count(1)
from holiday
where holidaydate between testdate
and testdate + 5)
मूल्यांकन अवधि बदलने के लिए बस "5" दोनों को एक और संख्या में बदलें।
संपादित करें - नीचे टिप्पणी के आधार पर, मेरा कोड पांचवें दिन के बाद किसी भी दिन का मूल्यांकन नहीं करता है। यह शायद किसी फ़ंक्शन के साथ बहुत आसान होगा, लेकिन निम्न सीटीई-आधारित कोड भी काम करेगा:
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
यह स्क्रिप्ट एक कैलेंडर तालिका बनाती है ताकि यह प्रत्येक दिन (अवकाश या गैर-अवकाश) का मूल्यांकन कर सके; तब हमें गैर-अवकाश दिनों की गिनती मिलती है, और छठे दिन का उपयोग करते हैं।