【发布时间】:2017-08-03 20:06:15
【问题描述】:
我有一个公司日历表,其中包含公司假期的指标。我需要从 datediff 中排除周末和假期。以下是我的完整查询。
例如 警报日期 2016 年 12 月 23 日 创建日期 2016 年 12 月 28 日 公司假期 12/26/16
下面的查询应该显示 2 个工作日,而不是 3 个。在这个查询下面,我将发布我遇到问题的假日文章。
SELECT
A.ALERT_UID,
A.ALERTCREATEDT_MMDDYYYY,
S.CreatedDate,
DATEDIFF(DD,A.ALERTS_CREATE_DT,S.CreatedDate)
-(DATEDIFF(WK,A.ALERTS_CREATE_DT,S.CreatedDate) * 2)
-(CASE WHEN DATENAME(DW,A.ALERTS_CREATE_DT) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(DW,S.CreatedDate) = 'Saturday' THEN 1 ELSE 0 END) AS BusinessDays
,DATEDIFF(DD,A.ALERTS_CREATE_DT,S.CreatedDate)
-(DATEDIFF(WK,A.ALERTS_CREATE_DT,S.CreatedDate) * 2) --HOW MANY WEEKEND DAYS PASSED BY
-(CASE WHEN DATENAME(DW,A.ALERTS_CREATE_DT) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(DW,S.CreatedDate) = 'Saturday' THEN 1 ELSE 0 END)
-(CASE WHEN CAL.GRH_HOLIDAY_IND = 'Y' AND CAL.CALENDAR_DATE BETWEEN CAST(A.ALERTS_CREATE_DT AS DATE) AND CAST(S.CreatedDate AS DATE) THEN 1 ELSE 0 END )AS BusinessDays_ExcludingHolidays
FROM A
FULL OUTER JOIN S ON A.id= S.id
INNER JOIN CAL ON A.ALERTCREATEDT_MMDDYYYY = CAL.CALENDAR_DATE
WHERE 1=1
AND S.CreatedDate IS NOT NULL
AND A.ALERT_UID = '2'
以下查询中的困难:
-(CASE WHEN CAL.GRH_HOLIDAY_IND = 'Y' AND CAL.CALENDAR_DATE BETWEEN CAST (A.ALERTS_CREATE_DT AS DATE) AND CAST(S.CreatedDate AS DATE) THEN 1 ELSE 0 END )AS BusinessDays_ExcludingHolidays
【问题讨论】: