在SQL中计算下一个工作日期

时间:2012-12-18 09:37:20

标签: sql

我正在为OTRS门票撰写SSRS报告,我的挑战如下。我必须确定票证的SLA是否与票证打开时的日期相同。我的工作周是星期一到星期五,节假日除外。一天中的工作时间是从09:00到17:00(总共8小时)。一些优先票有2小时的解决时间,一些非必要的票有5天的解决时间。如果优先票在星期五16:55打开,而下一个星期一是假日,则解决日期应该是星期二10:55(换句话说,票证SLA应该在工作时间的下一个工作日)

我的SLA时间以分钟为单位存储在ticket_SLA表中,即(2小时= 120分钟或5天= 2400分钟)。 5天的计算如下:

2400分钟除以60分钟得到小时,除以8得到天数(一个工作日有8小时)

2400/60/8 = 5天。

确定了这一点后,我必须继续进一步确定机票是否在SLA内。如果不是,我会在报告上以不同的颜色显示票证。

我应该解决的可用字段如下:

票证表:

Create_time datetime, ticket_sla_id int, tn long,

sla table:

sla_Id int, solution_time int (number of minutes)

假期表:

holiday_name varchar, holiday_date, holiday_iD

任何有关如何处理此问题的建议将不胜感激。提前致谢

1 个答案:

答案 0 :(得分:2)

对于TSQL,请查看SQLFiddle上的解决方案。 如果您使用其他DBMS,您应该能够将sql转换为您的语法。

提供的解决方案将返回每张票的截止日期。 在第一个CTE中,您必须定义min start-max enddate和max enddate。 希望有所帮助!

请注意datefirst的设置(请参阅this

@updated :修改过的fiddle-demo