0

我有一个日历表。我想在今天的日期之前获得 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 表示“是” HolidayDescription: 假日名称

请帮忙。

4

2 回答 2

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

确保*仅替换为您想要的字段。

于 2012-11-02T16:52:16.120 回答
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
于 2012-11-02T17:59:45.647 回答