这个问题在这里已有答案:
我有两个表可用,一个是带有start_date和end_date的main_table,另一个是holiday_table,其中标记了所有客户端假期和周末 .
我需要计算从start_date到end_date的所有工作日,从而消除holiday_table中针对该特定持续时间发生的所有假期 .
main_table(start_date date,end_date date)和holiday_table(假日日期)我有一段代码可以很容易地分开holiday_table中列出的所有假期,前提是start_date和end_date的值是硬编码的 . 代码:select(to_date('10 / 10/2017','mm / dd / yyyy') - to_date('10 / 01/2017','mm / dd / yyyy')) - (从中选择计数(*) holiday_2016 t t.holidays> to_date('10 / 01/2017',
'mm / dd / yyyy')和t.holidays <= to_date('10 / 10/2017','mm / dd / yyyy'))来自双
但这不是我想要的,因为我有一个表,其中start_date和end_date有不同的值,因此,这些值不能被硬编码 .
i/p tables :
1. main_table
start_date end_date
--------------------
10/01/2017 10/10/2017
10/05/2017 10/20/2017
09/29/2017 10/05/2017
holiday_table
holidays
------------
10/01/2017 --Sunday
10/02/2017 --Gandhi Jayanti
10/07/2017 --Saturday
10/08/2017 --Sunday
10/14/2017 --Saturday
10/15/2017 --Sunday
10/19/2017 --Diwali
o/p table should be like :
start_date end_date bus_days
------------------------------------------
10/01/2017 10/10/2017 06
10/05/2017 10/20/2017 10
09/29/2017 10/05/2017 04
如果这样做,我需要添加过滤器到start_date和end_date:
-
将取消具有start_date <'10/01/2017'和start_date> '10/20/2017'的请求
-
具有end_date <'10/01/2017'和start_date> '10/20/2017'的请求也将被删除
1 回答
这种方法过去对我有用,可以满足类似的需求
EDIT 现在我看到了一些样本数据我不确定你是否需要删除周末 . 您可能会在假期表中明确存储非工作日,因此您可能只需要:
SQL Fiddle
Query 1 :
Results :