The best way to handle this is with a calendar table. Barring that you could use something like the code below, but you need to understand the issues involved first.
The code below works, but it is based on an assumption that may not be true in all cases. Note the commented out command "SET DATEFIRST 7".
That is the default for U.S. English. If it is set to something else
the code does not work. You can SELECT @@DATEFIRST to see the current
Anyway, the example below runs through a set of dates and shows you the day of week and date of the input data, and the day of week and date of the calculated Monday of the previous week. Getting to Sunday of the previous week is just a matter of adding six days to that.
set nocount on
--SET DATEFIRST 7
declare @d datetime
set @d = dateadd(day,+7,getdate())
while @d > (getdate() - 3)
SELECT datename(weekday,@d), @d,
datename(weekday,dateadd(week, datediff(week, 0,
dateadd(week, datediff(week, 0, dateadd(day,-8,@d)), 0)
Set @d = dateadd(day,-1,@d)