Select 基于日历中的下一个工作日 table
Select based on the next business day in a calendar table
我已经填写了日历 table(Calendar_Date、Is_Business_Day)。
我已经在这个基础上做了一个SELECT
:
- 如果今天是之前当月的第3天,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
- 如果今天是当月第 3 天 之后,select 从这一天到上个月最后一天的所有天数。
例如: 明天,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)
我已经填写了日历 table(Calendar_Date、Is_Business_Day)。
我已经在这个基础上做了一个SELECT
:
- 如果今天是之前当月的第3天,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
- 如果今天是当月第 3 天 之后,select 从这一天到上个月最后一天的所有天数。
例如: 明天,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)