Here's my solution, tested against 8 days.
SET DateFirst 7
DECLARE @Today datetime
SET @Today = '2008-10-22'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-23'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-24'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-25'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-26'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-27'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-28'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
SET @Today = '2008-10-29'
SELECT DateAdd(wk, DateDiff(wk, 0, DateAdd(dd, -1, @Today)) - 1, 0) as PreviousMonday, @Today as Today
Here's the trouble with Sunday:
SELECT
DateDiff(wk, 0, '2008-10-25') as SatWeek, --5677
DateDiff(wk, 0, '2008-10-26') as SunWeek, --5688
DateDiff(wk, 0, '2008-10-27') as MonWeek --5688
SELECT
DatePart(dw, '2008-10-25') as SatPart, --7
DatePart(dw, '2008-10-26') as SunPart, --1
DatePart(dw, '2008-10-27') as MonPart, --2
convert(datetime,'2008-10-25') - (DatePart(dw, '2008-10-25') - 2) as SatMonday,
--'2008-10-20'
convert(datetime,'2008-10-26') - (-1) as SunMonday,
--'2008-10-27'
convert(datetime,'2008-10-27') - (DatePart(dw, '2008-10-27') - 2) as MonMonday
--'2008-10-27'
Many of these solutions Provide the same answer for Sunday and Monday in the same week. The old Monday should not be resigned until another Monday has occurred.