TSQL日历表,从日期开始计算10个工作日

时间:2014-09-30 09:46:44

标签: sql sql-server tsql

我有一个日历表,用于存储日期行和日期为假日或工作日的指示。

如何从2014-12-22中选择将来5个工作日的日期,以便所选日期为2014-12-31

Date_Id     Date_Date   Date_JDE    Is_WorkingDay
20141222    2014-12-22  114356      1
20141223    2014-12-23  114357      1
20141224    2014-12-24  114358      1
20141225    2014-12-25  114359      0
20141226    2014-12-26  114360      0
20141227    2014-12-27  114361      0
20141228    2014-12-28  114362      0
20141229    2014-12-29  114363      1
20141230    2014-12-30  114364      1
20141231    2014-12-31  114365      1

4 个答案:

答案 0 :(得分:2)

您可以像这样使用CTE ......

;WITH cteWorkingDays AS 
(
 SELECT Date_Date,  ROW_NUMBER() OVER (ORDER BY Date_Date) as 'rowNum' 
 FROM TableName 
 WHERE Is_WorkingDay = 1 
 and Date_Date > '20141222' -- this will be a param I suppose
)

SELECT Date_Date 
FROM cteWorkingDays 
WHERE rowNum = 5 -- this can be changed to 10 (title value

这是手动打字,但它足够接近。

编辑:根据评论。

Declare @DateToUse TYPE  --  unsure if you're using a string or a date type.
SELECT @DateToUse = Date_Date 
    FROM cteWorkingDays 
    WHERE rowNum = 5

答案 1 :(得分:1)

...;

WITH DatesCTE AS
(
    SELECT Date_Id,
           Date_Date,
           Date_JDE,
           Is_WorkingDay,
           ROW_NUMBER() OVER(ORDER BY Date_Date) AS rn
    FROM   DatesTable
    WHERE  Is_WorkingDay = 1
           AND Date_Date > '2014-12-22'
)
SELECT Date_Date
FROM   DatesCTE
WHERE  rn = 5

<强> SQL Fiddle Demo

答案 2 :(得分:0)

你可以尝试这样:

with calender as 
(select top 5 date_id,date_date,date_jde from calender 
where date_date>='2014-12-22' and  is_workingday='1)calender 
select top 1 * from calender order by date_date desc

答案 3 :(得分:0)

使用派生表

select * from
(
SELECT Date_Date,  ROW_NUMBER() OVER (ORDER BY Date_Date) as 'RowNum' 
 FROM Table_calendar  
 WHERE Is_WorkingDay = 1 
 and CAST(Date_Date as DATE) > '2014-12-22'
)d
where d.RowNum=5