Creo que esta es una solución mucho más limpia:
SELECT
-- 17530101 or 1753-01-01 is the minimum date in SQL Server
DATEADD(dd, ((DATEDIFF(dd, '17530101', GETDATE())/7) * 7) - 7, '17530101') AS [LowerLimit], -- Last Week's Monday
DATEADD(dd, ((DATEDIFF(dd, '17530101', GETDATE())/7) * 7) - 1, '17530101') AS [UpperLimit] -- Last Week's Sunday.
que puede ser utilizado como esto en una verdadera consulta mundo:
SELECT
*
FROM
SomeTable
WHERE
SomeTable.[Date] >= DATEADD(dd, ((DATEDIFF(dd, '17530101', GETDATE())/7) * 7) - 7, '17530101') AND
SomeTable.[Date] <= DATEADD(dd, ((DATEDIFF(dd, '17530101', GETDATE())/7) * 7) - 1, '17530101')
Estas son algunas pruebas:
1. año bisiesto
Fecha actual: 2016-02-29 00:00:00.000
Resultados:
LowerLimit UpperLimit
2016-02-22 00:00:00.000 2016-02-28 00:00:00.000
2. La semana pasada estaba en años diferentes
Fecha actual: 2016-01-06 00:00:00.000
LowerLimit UpperLimit
2015-12-28 00:00:00.000 2016-01-03 00:00:00.000
3. Límite inferior en el mes anterior y un límite superior en el mes en curso
Fecha actual: 2016-05-04 00:00:00.000
LowerLimit UpperLimit
2016-04-25 00:00:00.000 2016-05-01 00:00:00.000
4.Fecha actual es el domingo
Fecha actual: 2016-05-08 00:00:00.000
LowerLimit UpperLimit
2016-04-25 00:00:00.000 2016-05-01 00:00:00.000
¿No fue el último lunes 10? ¿Estás buscando el lunes de la semana anterior? –
¿Por qué su último lunes no fue '10/09/2012'? –
Disculpa, estaba clasificando eso como este lunes (en la semana actual) así que sí, las semanas anteriores el lunes sería un mejor turno de frase – JsonStatham