Проблема в вашем запросе DATEPART(WEEKDAY,...
.Возвращаемый день недели зависит от ваших региональных настроек и, скорее всего, использует воскресенье в качестве начала недели.
Чтобы рассчитать самую последнюю пятницу, вы можете использовать такое выражение (которое не зависит от региональных настроек):
DATEADD(week, DATEDIFF(day, 4, GETDATE())/7, 4)
При этом используется тот факт, что «дата 0» SQL Server - 01.01.1900 (понедельник), поэтому «дата 4» - 1/5/1900 (пятница).), а также использует DATEDIFF, возвращающий целое число, поэтому деление на 7 представляет собой целочисленное деление .
Предполагая, что ваш WeekNum
работает как нужно, особенно после смены годазапрос можно изменить следующим образом:
SELECT DATEPART(week, Friday)+1 AS WeekNum, COUNT(*) AS [Count]
FROM
(
SELECT DATEADD(week, DATEDIFF(day, 4, t.DateField)/7, 4) AS Friday
FROM [Table] t
WHERE t.DateField >= DATEADD(week, DATEDIFF(day, 4, GETDATE())/7-9, 4)
) AS [table]
GROUP BY Friday
ORDER BY Friday
Кроме того, вы можете легко отобразить даты, если хотите:
SELECT Friday, DATEADD(day, 6, Friday) AS Thursday, COUNT(*) AS [Count]
FROM ... -- same as above