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

时间:2018-05-02 13:10:04

标签: sql sql-server date calendar where

我已填写日历表(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天之后切换

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

1 个答案:

答案 0 :(得分:2)

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

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