с выражением вы получите последний понедельник:
CAST(GETDATE()-(@@DATEFIRST-1+DATEPART(weekday,GETDATE())) % 7+1 AS DATE)
Здесь мы используем @@DATEFIRST и DATEPART(weekday,...), чтобы найти последнюю ПОНЕДЕЛЬНИК.
Затем вы должны сгенерировать 8 (два месяца) строк последовательности дней каждый из них за 7 дней до следующего. Здесь я использовал CTE, но вы можете использовать UNION или TOP 8 строк из существующей (системы или пользователя) в вашей таблице DB для генерации 8 строк.
;WITH CT(n) AS
(
SELECT 0
UNION ALL
SELECT n+1 FROM CT WHERE n < 7
)
SELECT DATEADD(DAY,-n*7,
CAST(GETDATE()-
(@@DATEFIRST-1+DATEPART(weekday,GETDATE())) % 7+1 AS DATE)) as DT
FROM CT ORDER BY n
Sqlfiddle demo
Благодаря Valex, ваш пример также помочь мне в понимании рекурсивное ОТВ – user2435783