Select 基于日历中的下一个工作日 table

Select based on the next business day in a calendar table

我已经填写了日历 table(Calendar_Date、Is_Business_Day)。

我已经在这个基础上做了一个SELECT :

例如:今天是2018-05-02,这是我的输出:

Calendar_Date |  Is_Business_Day
  2000-01-01  |    0
  ...         |
  2018-03-29  |    1
  2018-03-30  |    1
  2018-03-31  |    0

例如: 明天,2018-05-03 这将是我的输出:

Calendar_Date | Is_Business_Day
  2000-01-01  |   0
  ...         |  
  2018-04-28  |   0
  2018-04-29  |   0
  2018-04-30  |   1

这是我的查询:

SELECT        Calendar_Date, Is_Business_Day
FROM            Calendar_Table
WHERE        (Calendar_Date <= (CASE WHEN DATEPART(day, GETDATE()) >= 3 THEN EOMONTH(DATEADD(MONTH, - 1, GETDATE())) ELSE EOMONTH(DATEADD(MONTH, - 2, GETDATE())) END))

这工作得很好,但我现在想要它做的是在 第一个工作日 之后的第 3 天之后切换,而不是在 第一个工作日之后切换该月的第 3 天。

我如何使用日历中有关工作日的信息 table 来执行此操作?

我认为下面的查询应该有效。

   ;WITH CTE AS
    (
        SELECT        Calendar_Date, Is_Business_Day
        FROM          Calendar_Table
        WHERE        (Calendar_Date <= (CASE WHEN DATEPART(day, GETDATE()) >= 3 
                                          THEN EOMONTH(DATEADD(MONTH, - 1, GETDATE())) 
                                  ELSE EOMONTH(DATEADD(MONTH, - 2, GETDATE())) END))
    )
    SELECT * FROM CTE
    WHERE Calendar_Date >= (SELECT MIN(Calendar_Date) FROM CTE WHERE Is_Business_Day=1)