Sql server 2008 查找2个工作日

Sql server 2008 查找2个工作日,sql-server-2008,tsql,Sql Server 2008,Tsql,我有一张日历桌。我想在今天的日期之前有两件事要做,而不去度假和周末 例如: 例1:2013年新年是星期二。如果是1月3日星期四,那么我的开始日期是12月31日星期一 例2:如果是12月31日星期一,那么我的起始日期是12月27日星期四 我的Clandar表已经预先填充了30年的日期,并有标志来确定哪些是周末和假日。该表包含以下字段: dt:30年的日期和时间 Y:一年 D:白天 M:一个月 Isholiday:是不是假日,标记为0表示否,1表示是 是工作日吗?标记为0表示否,1表示是 Holid

我有一张日历桌。我想在今天的日期之前有两件事要做,而不去度假和周末

例如:

例1:2013年新年是星期二。如果是1月3日星期四,那么我的开始日期是12月31日星期一

例2:如果是12月31日星期一,那么我的起始日期是12月27日星期四

我的Clandar表已经预先填充了30年的日期,并有标志来确定哪些是周末和假日。该表包含以下字段:

dt:30年的日期和时间 Y:一年 D:白天 M:一个月 Isholiday:是不是假日,标记为0表示否,1表示是 是工作日吗?标记为0表示否,1表示是 HolidayDescription:假日名称


请帮助。

这是您想要的:

select top 1 *
  from ( select * 
           from Calendar 
          where IsHoliday = 0 
            and IsWeekday = 1 
            and dt between DateAdd( Day, -6, GetDate ) and GetDate() 
       ) tmpCalendar
 where dt <= DateAdd( Day, -2, GetDate() )
 order by dt desc
请确保仅将*替换为所需的字段。

尝试以下方法:

SELECT dt FROM
(
    SELECT dt, ROW_NUMBER() OVER (ORDER BY dt DESC) AS R
    FROM
        Calendar
    WHERE
        IsHoliday = 0
        AND IsWeekday = 1
        AND dt < GETDATE()
) T
WHERE R = 2

如果是12月31日星期一,则开始日期应为27日星期四,但上述解决方案给出的是28日星期五,这是错误的。星期五是星期一之前的一个工作日,而不是两个工作日。Thanks@Dominic此解决方案将返回至少比今天早2天的第一个工作日,但不总是从今天开始的第二个工作日。