2014-03-07 94 views
0

因此,这里有一些常见问题,但我还没有找到真正适合我的具体需求的答案。我有两张桌子。一个有一个ProjectClosedDates的列表。另一张桌子是一个日历表,像2025一样,如果行日期是一个周末日,并且另一列是假日日期,那么该日历表具有列。加入日历表 - 5个工作日

我的最终目标是根据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 working days holidays

然而,这仅仅是一个日期,我需要基于每行的一列日期。想知道做这件事的最好方法是什么?我正在使用SQL-Server Management Studio。

回答

0

没有经过充分测试并没有想到过:

如果“工作日”这一概念是普遍的,在你的系统中重要的是,你可以列“营业日序列”到你的表中添加。该列将是一个简单的唯一顺序,每个工作日增加一个,每天不计为工作日。

的数据将是这个样子:

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 
);