Cách tiếp cận của tôi sẽ là tạo một số ngày cố định bắt đầu từ sysdate -1 giảm dần và sau đó làm việc với chúng. Trong đoạn mã sau, tôi đã chọn 100. Khi bạn đã chọn đúng ngày, chỉ cần sử dụng nó để lọc trên table1.
select dates
from (
select rownum as rn,
dates
from (
select x.dates,
nvl2(h.holiday_from,'T','F') as hd,
decode (to_char(x.dates,'D')-1,6,'T',7,'T','F') as WE
from (
select trunc(sysdate) - rownum as dates
from dual d
connect By rownum <= 100 -- change this number if you plan on having long holidays
) x
left outer join holidays h
on x.dates between h.holiday_fromand h.holiday_to
)
where hd = 'F' and WE = 'F' -- exclude holidays and weekends
)
where rn = 14; -- return the 14th working day from now