Я пытаюсь суммировать общее количество отработанных часов и группировать их по неделям. Моя неделя начинается в понедельник и заканчивается в воскресенье. Проблема, с которой я сталкиваюсь, состоит в том, что цифры всегда имеют первую неделю, но остальные недели в порядке. Проблема с первой неделей всегда очень низкая.Группировка часов по неделям при использовании SQL
Смотрите снимок
Вот мой код
SELECT
UID,
CONVERT(VARCHAR, x.WeekBeginDate, 101) as WeekBeginDate,
x.TOTAL_HOURS
FROM
(SELECT
UID,
DATEADD(DD, CONVERT(INT, (DATEDIFF(DD, '1/1/1900', t.DT)/7)) * 7, '1/1/1900') [WeekBeginDate],
SUM(HOURS) AS TOTAL_HOURS
FROM
myTable t
WHERE
UID = 'test1'
AND DT >= DATEADD(WEEK, -6, GetDate())
GROUP BY
UID, CONVERT(INT, DATEDIFF(DD, '1/1/1900', t.DT)/7)) x
ORDER BY
1
Вы можете использовать DATEPART (wk) вместо деления дня на 7. – GendoIkari
Не потому, что ваше время начала - DATEADD (WEEK, -6, GetDate()), который не является понедельником, но в любое время, которое было 6 недель назад, включая часы и минуты. –
Вместо этого супер-оператора создайте календарь таблицу и вычислять через объединения. Вы будете удивлены, как все упростится. –