所以这是这里的一个常见问题,但我还没有找到真正适合我的特定需求的答案。我有 2 张桌子。其中有一个 ProjectClosedDates 列表。另一个表是一个类似于 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 工作日 节假日 https://stackoverflow.com/questions/20595934/sql-working-days-holidays
但是,这只是一个日期,我需要基于每一行的一列日期。有什么想法可以做到这一点的最佳方法是什么?我正在使用 SQL Server Management Studio。
完全未经测试且未经过深思熟虑:
如果“工作日”的概念在您的系统中很常见且很重要,您可以在表中添加“工作日顺序”列。该列将是一个简单的唯一序列,每个工作日递增 1,对于不计为工作日的每一天递增 1。
数据看起来像这样:
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
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)