0
我必須生成一個包含所有非營業日和其下一個工作日的表格。計算幾年的下一個工作日
鑑於: 表格存儲某些城市的週末。
CREATE TABLE WeekHolidays
(
CitiesId int
,Cities_Name varchar(50)
,HolidayDate int
)
另一臺舉行公衆假期:
CREATE TABLE Holidays
(
CitiesId int
,Cities_Name varchar(50)
,HolidayDate datetime
)
目前,我產生了週末在未來2047周(近40年)+加上公共假日,如:
SELECT Cities_Id
,Cities_Name
,DATEADD(WEEK,sptv.number,DATEADD(DAY,(((HolidayDate - 1) + 7) %7),DATEADD(week, DATEDIFF(day, 0, getdate())/7, 0))) as HolidayDate
FROM WeekHolidays
CROSS JOIN master..spt_values sptv
WHERE sptv.type = 'P'
UNION
SELECT Cities_Id
,Cities_Name
,HolidayDate
FROM Holidays
但現在我需要爲每個日期添加logik的下一個工作日:向前滾動到不在此表中的第一天(對於每個城市)。
Rextester重現: http://rextester.com/OZTT34904
所以結果應該是這樣的:
CitiesId Cities_Name HolidayDate NextBusinessDay
3 PARIS 14.07.2017 17.07.2017
3 PARIS 15.07.2017 17.07.2017
3 PARIS 16.07.2017 17.07.2017
3 PARIS 22.07.2017 24.07.2017
3 PARIS 23.07.2017 24.07.2017
3 PARIS 29.07.2017 31.07.2017
3 PARIS 30.07.2017 31.07.2017
3 PARIS 05.08.2017 07.08.2017
3 PARIS 06.08.2017 07.08.2017
3 PARIS 12.08.2017 14.08.2017
3 PARIS 13.08.2017 14.08.2017
3 PARIS 15.08.2017 16.08.2017
3 PARIS 18.08.2017 21.08.2017
3 PARIS 19.08.2017 21.08.2017
3 PARIS 20.08.2017 21.08.2017
3 PARIS 26.08.2017 28.08.2017
3 PARIS 27.08.2017 28.08.2017
在例如:HolidayDate = 2017年7月14日的下一個BusinessDay將是2017年7月17日,爲15.07。 & 16.07。都包含在HolidayDate列中(星期日&星期日是巴黎的假期)。
我希望現在它更容易理解。
任何想法如何輕鬆快速地解決這個問題?
在此先感謝! 斯特凡
爲什麼週末和在不同的表公衆假期區分。如果是假期,那是假期。如果你真的需要區分,只需添加一個列節點類型或其他東西。至少應該簡化你的結構。 – ADyson
[這可能會爲您節省大量時間](https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/)它計算平日,節假日等......你可以爲自己的假期輕微編輯亞倫的方法 – scsimon
這些表格是由系統給出的。我不太喜歡它,但我必須應付它。其遺留系統 –