SQL查询不考虑周末和节假日的平均时间

SQL查询不考虑周末和节假日的平均时间,sql,sql-server-2012,Sql,Sql Server 2012,我需要计算一个字段从创建(a.Date\u Create)到完成(s.Date\u Status\u Finalized)所需的平均时间 无法计算周末和假期 但是,下面的查询正在运行,它考虑了该期间的每一天 SELECT AVG(DATEDIFF(HH, a.Date_Create, s.Date_Status_Finalized)) FROM RTRC_Processo p Left join RTRC_Solucao s on (s.Id_Processo_RTRC = p.Id ) Le

我需要计算一个字段从创建(a.Date\u Create)到完成(s.Date\u Status\u Finalized)所需的平均时间

无法计算周末和假期

但是,下面的查询正在运行,它考虑了该期间的每一天

SELECT AVG(DATEDIFF(HH, a.Date_Create, s.Date_Status_Finalized)) 
FROM RTRC_Processo p
Left join RTRC_Solucao s on (s.Id_Processo_RTRC = p.Id )
Left Join RTRC_Abertura a on (a.Id_Processo_RTRC = p.Id) 
WHERE 1=1 
and s.Status ='F' 
and YEAR(s.Date_Status_Finalized) = 2019
and MONTH(s.Date_Status_Finalized)= 08

为了排除工作日,您需要使用下面的查询,其中我只需找到天数的差异,并将其乘以24即可得到小时数-

SELECT AVG(
          (DATEDIFF(DD, a.Date_Create, s.Date_Status_Finalized) - 
           DATEDIFF(WK, a.Date_Create, s.Date_Status_Finalized) * 2 -  
           CASE WHEN datepart(dw, @d1) = 1 THEN 1 ELSE 0 END +
           CASE WHEN datepart(dw, @d2) = 1 THEN 1 ELSE 0 END
          ) * 24 ) 
FROM RTRC_Processo p
Left join RTRC_Solucao s on (s.Id_Processo_RTRC = p.Id )
Left Join RTRC_Abertura a on (a.Id_Processo_RTRC = p.Id) 
WHERE 1=1 
and s.Status ='F' 
and YEAR(s.Date_Status_Finalized) = 2019
and MONTH(s.Date_Status_Finalized)= 08

同样,为了排除假日,您需要使用假日表减去此期间发生的假日数。

(1)提供示例数据和所需结果。(2) 用您正在使用的数据库标记您的问题。sql-server-2012 WHERE子句中的这些表的条件使该左连接返回常规内部连接结果。将它们移动到ON子句以获得真正的左联接结果。如果要排除周末和假日,则需要传递假日表以排除假日。对于周末,只需通过与当天不匹配的条件。返回时间为小时?您不需要小时吗?p效果。非常感谢。