SQL查询不考虑周末和节假日的平均时间
我需要计算一个字段从创建(a.Date\u Create)到完成(s.Date\u Status\u Finalized)所需的平均时间 无法计算周末和假期 但是,下面的查询正在运行,它考虑了该期间的每一天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
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效果。非常感谢。