根据日历表中的下一个工作日进行选择



我已经填写了一个日历表(Calendar_Date,Is_Business_Day(。

我已经设法在此基础上做了一个SELECT

  • 如果今天在当月的第 3 天之前,请选择这一天之前的所有日子,直到倒数第二个月的最后一天

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

Calendar_Date |  Is_Business_Day
2000-01-01  |    0
...         |
2018-03-29  |    1
2018-03-30  |    1
2018-03-31  |    0
  • 如果今天在当月 3 日之后,请选择这一天之前的所有日子,直到上个月的最后一天。

例如:明天,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 日之后切换。

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

我认为以下查询应该有效。

;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)

最新更新