Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 加入日历表-5个工作日_Sql_Calendar - Fatal编程技术网

Sql 加入日历表-5个工作日

Sql 加入日历表-5个工作日,sql,calendar,Sql,Calendar,这是一个常见的问题,但我还没有找到一个真正适合我具体需求的答案。我有两张桌子。其中一个有一个projectcloseddate列表。另一个表是类似2025的日历表,其中有列表示行日期是否为周末,另一列表示日期是否为假日 我的最终目标是根据ProjectClosedDate找出该日期后5个工作日的日期。我的想法是,我将使用日历表并将其自身连接起来,这样我就可以在日历表中插入一列,该列距离行日期还有5个工作日。然后,我将基于ProjectClosedDate=RowDate将项目表加入到该表中 如果

这是一个常见的问题,但我还没有找到一个真正适合我具体需求的答案。我有两张桌子。其中一个有一个projectcloseddate列表。另一个表是类似2025的日历表,其中有列表示行日期是否为周末,另一列表示日期是否为假日

我的最终目标是根据ProjectClosedDate找出该日期后5个工作日的日期。我的想法是,我将使用日历表并将其自身连接起来,这样我就可以在日历表中插入一列,该列距离行日期还有5个工作日。然后,我将基于ProjectClosedDate=RowDate将项目表加入到该表中

如果我只是想检查实际业务日期表中的一条记录,我可以使用以下方法:

SELECT actual_date from 
(
    SELECT actual_date, ROW_NUMBER() OVER(ORDER BY actual_date) AS Row 
    FROM DateTable
    WHERE is_holiday= 0 and actual_date > '2013-12-01'
    ORDER BY actual_date
) X
WHERE row = 65
从这里开始:


然而,这只是一个日期,我需要一列基于每行的日期。有没有想过最好的方法是什么?我使用的是SQL Server Management Studio。

完全没有经过测试,也没有经过深思熟虑:

如果“工作日”的概念在您的系统中很常见且很重要,您可以在表中添加一列“工作日序列”。该列将是一个简单的唯一序列,每个工作日递增1,不计入工作日的每一天递增null

数据如下所示:

Date       BDAY_SEQ
========== ========
2014-03-03    1
2014-03-04    2
2014-03-05    3
2014-03-06    4
2014-03-07    5
2014-03-08    
2014-03-09    
2014-03-10    6
现在,从任何日期查找第N个工作日都是一项简单的任务。 只需对日历表进行自联接,并在联接条件中添加偏移量

select a.actual_date
      ,b.actual_date as nth_bussines_day
  from DateTable a
  join DateTable b on(
       b.bday_seq = a.bday_seq + 5
  );