To może być zbyt skomplikowane, ale było mnóstwo zabawy.
- Ta pierwsza część dotyczy ostatniego poniedziałku.
--Zaczyna się od utworzenia tabeli, która będzie zawierała wszystkie daty do ostatniego poniedziałku, a następnie ustawia min tej tabeli na zmienną @moonaythisweek.
declare @dateholder table (
thedate date,
theday varchar(10)
)
declare @now datetime
set @now = GETDATE()
;with mycte as (
select
cast(@now as date) as "thedate",
DATENAME(dw,@now) as "theday"
union all
select
cast(DATEADD(d,-1,"thedate") as date) as "thedate",
DATENAME(DW,DATEADD(d,-1,"thedate")) as "theday"
from
mycte
where
"theday" <> 'Monday'
)
insert into @dateholder
select * from mycte
option (maxrecursion 10)
declare @mondaythisweek date
set @mondaythisweek = (
select min(thedate)
from @dateholder
)
--This część tworzy tabelę z @mondaythisweek do następnej niedzieli
;with mon_to_sun as (
select
@mondaythisweek as "dates",
DATENAME(dw,@mondaythisweek) as "theday"
union all
select
cast(DATEADD(d,1,"dates") as date) as "dates",
DATENAME(dw,cast(DATEADD(d,1,"dates") as date)) as "theday"
from mon_to_sun
where "theday" <> 'Sunday'
)
select *
from mon_to_sun
option(maxrecursion 10)
Trzeba przyjrzeć się tej odpowiedzi [Get pierwszy dzień tygodnia w SQL Server] (http://stackoverflow.com/a/7169656/1297603) – Yaroslav