2014-03-07 36 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 
);