Я пытаюсь сгруппировать запрос к началу каждой недели, которая должна быть понедельником. У меня есть различные ссылки из Интернета, чтобы получить первый день недели, используя следующий код:
DATEADD(WEEK, DATEDIFF(WEEK, 0, @Date), 0)
Однако это возвращает неверный результат следующим образом:
SET DATEFIRST 7
DECLARE @Date DATE
SET @Date = '1/7/2018'
SELECT DATEADD(WEEK, DATEDIFF(WEEK, 0, @Date), 0)
и результат «1/8/2018». Очевидно, что неделя не должна начинаться на следующий день после указанной даты.
Я попытался установить день недели с помощью «SET DATEFIRST = 1», но это не влияет
Вот пример того, чего я пытаюсь достичь:
SELECT
DATEADD(WEEK, DATEDIFF(WEEK, 0, m.MeasureDT), 0) as StartOfWeek,
SUM(m.NumeratorVAL) AS Numerator
FROM
Database.Schema.Table AS m
GROUP BY
DATEADD(WEEK, DATEDIFF(WEEK, 0, m.MeasureDT), 0)
ORDER BY
DATEADD(WEEK, DATEDIFF(WEEK, 0, m.MeasureDT), 0)
В результате каждая неделя начинается в понедельник, но включает в себя предыдущее воскресенье. Есть ли какие-то временные настройки на системном уровне или уровне SQL Server, которые мне не хватает, или в логике есть недостатки? Любая помощь будет принята с благодарностью.