从SQL Server 2012可以使用LAG()函数:
;with
d as (
select SPECIAL_PERIOD, dateadd(WEEK, cast(right(SPECIAL_PERIOD, 2) as int)-1, DATEFROMPARTS(cast(left(SPECIAL_PERIOD, 4) as int), 1, 1)) wk
from MyCalendar
),
p as (
select d.*, LAG(wk) over (order by SPECIAL_PERIOD) prev, dateadd(week, -1, wk) prev_wk
from d
)
select *, iif(prev=prev_wk,1,0) is_special
from p
where prev<>prev_wk -- rem this to see special weeks
order by 1
为SQL Server 2008中您可以使用此语法:
;with
d as (
select ROW_NUMBER() over (order by SPECIAL_PERIOD) N, SPECIAL_PERIOD, dateadd(WEEK, cast(right(SPECIAL_PERIOD, 2) as int)-1, DATEFROMPARTS(cast(left(SPECIAL_PERIOD, 4) as int), 1, 1)) wk
from #cal
),
p as (
SELECT d.*,p.wk prev, dateadd(week, -1, d.wk) prev_wk
FROM D
LEFT JOIN D p on d.N = p.n+1
)
select *, case when prev=prev_wk then 1 else 0 end is_special
from p
where prev<>prev_wk -- rem this to see special weeks
order by 1
的SQL Server版本? – MtwStark