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