Отредактировано, чтобы отразить правильные возвращаемые значения для DATEPART (dw, ...)
Вы можете выполнить логику, чтобы определить, какие комбинации дня / часа действительны внутри оператора CASE в подзапросе SELECT, а затемгруппировать по номеру недели во внешнем запросе.Это упростит предложение WHERE.Я нахожу этот стиль немного менее непрозрачным и легче поддерживать в долгосрочной перспективе.
Пример ниже был проверен на Microsoft SQL SERVER.
SELECT
DATEPART(wk, Update_Date) AS GroupByWeek
, col1
, SUM(col2)
FROM (
SELECT
col1
, col2
, Update_Date
, CASE
WHEN DATEPART(dw, Update_Date) = 1 AND DATEPART(hh, Update_Date) >= 12 THEN 1
WHEN DATEPART(dw, Update_Date) = 6 AND DATEPART(hh, Update_Date) < 13 THEN 1
WHEN DATEPART(dw, Update_Date) BETWEEN 2 AND 5 THEN 1
ELSE 0
END AS FallsInWindow
FROM table
) RowsInWindow
WHERE
RowsInWindow.Update_Date BETWEEN '2018-01-01' AND '2018-04-01'
AND RowsInWindow.FallsInWindow = 1
GROUP BY
DATEPART(wk, Update_Date)
, col1
ORDER BY GroupByWeek