首页 > 解决方案 > 根据日历表中的下一个工作日选择

问题描述

我已经填写了一个日历表(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))

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

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

标签: sqlsql-serverdatecalendarwhere

解决方案


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

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

推荐阅读