我的要求: - 对于一个数据库表,其中包含一年中所有日期的标记“IsHoliday”,如果是假日,则为“是”,如果不是,则为“否”。
我想给那个不是假期的日子索引,从1开始到一年的第一个工作日,依此类推。在批次的帮助下。
当前情况: - 我的数据库(Oracle)中有手动条目维护的假日表。每当我们必须检查一天工作或假日的特定日期时,我们会在输入的每个日期点击数据库,并与假期表进行比较,这是一种昂贵的方式。
我要求的似乎是一种优化的方式,因此我想维护一个DB表,其中WorkDays作为条目与一年中的日期一起,因为在某些业务场景中我必须给出当天的数字作为返回(如果是jan(星期四)是第4个工作日然后我想返回4,8th jan as 6)
CAL_DT IS_HOLIDAY WKNG_DAY_INDX
1月1日 - 11月是
2-Jan-11 No 1
3月1日至11月2日
4月1日 - 11月是
5月1日至11月3日
6-Jan-11 No 4
通过批处理来填充索引,检查is_holiday = no字段是我的要求。
我希望我现在很清楚??
我很感激这些建议。
答案 0 :(得分:0)
您可以使用ROW_NUMBER()分析函数生成序列号。
SELECT ROW_NUMBER() OVER (ORDER BY CalendarDate) AS RowNum_
, CalendarDate
FROM MyDB.Calendar
Where IsHoliday = 'No';
答案 1 :(得分:0)
你在这里遇到两个大问题:
1 - 并非所有文化都有相同的假期,因此您对印度的参赛作品与美国不同,大多数其他国家都不会。
2 - 很多假期四处走动,所以a(day,year,isHoliday)元组无法处理11月的第4个星期四作为假期,因为它不是同一天。更不用说闰年会在二月之后搞乱假期。
你应该做的是在假日表中有几列 - 一组用于移动假期的列和一组列,其中假日总是在一个月的同一天。当填充另一列的列时,其中一列将为null。祝你好运,将这些转化为年份。