我有一个包含公司假期的表(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
谢谢, 阿尼尔
答案 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
。
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