如果日历日期是周末或假日,则在下一个工作日选择SQL Logic

时间:2015-09-16 21:31:58

标签: sql calendar teradata

我有一个包含公司假期的表(Holiday_Ind和Weekend_Ind)。 表名 - system_calendar.calendar

我正在寻找创建一个sql脚本,如果日期是周末或假日,应选择以下工作日:

示例 - 2015年1月:

Date        CalendarDay#    BusinessDay#
1/1/2015    1               1
1/2/2015    2               1
1/3/2015    3               2
1/4/2015    4               2
1/5/2015    5               2
1/6/2015    6               3
1/7/2015    7               4  

示例 - 2015年8月:

Date        CalendarDay#    BusinessDay#
8/1/2015    1               1
8/2/2015    2               1
8/3/2015    3               1
8/4/2015    4               2
8/5/2015    5               3
8/6/2015    6               4
8/7/2015    7               5
8/8/2015    8               6
8/9/2015    9               6
8/10/2015   10              6

谢谢, 阿尼尔

2 个答案:

答案 0 :(得分:1)

获得此结果的最简单方法是利用CASE的累积总和:

greatest(sum(case when h_ind = 'Y' then 0 else 1 end)
         over(partition by eom
              order by dt
              rows unbounded preceding), 1)

GREATEST表示一个月的第一天不是工作日的情况。

劫持了@ vkp的fiddle

答案 1 :(得分:0)

下面的代码将为您提供有关如何进行营业日计算的详细示例。您可能需要修改某些功能以适合teradata

Fiddle with sample data

select dt, h_ind,
case when h_ind = 'Y' 
then row_number() over(order by dt)-
rank() over(partition by h_ind order by dt) + 1
else rank() over(partition by h_ind order by dt) end
 as businessday
from t 
order by dt