找2个工作日

时间:2012-11-02 16:26:02

标签: sql-server-2008 tsql

我有一张日历表。我想在今天的日期之前获得2个业务,同时跳过假期和周末。

例如:

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

示例2:如果是星期一(12/31),那么我的开始日期是星期四(12/27)。

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

dt:30年的日期和时间 Y:年 D:日 M:月 Isholiday :(假期不是,标有0表示“否”,1表示“是”) IsWeekday :(是工作日吗?标记为0表示“否”,1表示“是” HolidayDescritption:假日名称

请帮忙。

2 个答案:

答案 0 :(得分:1)

这就是你想要的:

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

确保仅使用您想要的字段替换*

答案 1 :(得分:1)

试试这个:

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