一张Weeks表,记录了周与日期的对应关系。 比如数据如下week
201049
201050
201051
201052 //52周是2010年的最后一周
201101
201102
201103
201104请问我通过一个变量,如201052,怎么查到他的最近5周情况,201050、201051、201052、201101,201102
201049
201050
201051
201052 //52周是2010年的最后一周
201101
201102
201103
201104请问我通过一个变量,如201052,怎么查到他的最近5周情况,201050、201051、201052、201101,201102
union all
select top 100 percent * from (select top 2 * from Weeks where [week] > '201052' order by [week]) t
insert into Weeks values('201049')
insert into Weeks values('201050')
insert into Weeks values('201051')
insert into Weeks values('201052')
insert into Weeks values('201101')
insert into Weeks values('201102')
insert into Weeks values('201103')
insert into Weeks values('201104')
goselect top 100 percent * from (select top 3 * from Weeks where [week] <= '201052' order by [week] desc) t
union all
select top 100 percent * from (select top 2 * from Weeks where [week] > '201052' order by [week]) t
order by [week]drop table weeks/*
week
------
201050
201051
201052
201101
201102(所影响的行数为 5 行)
*/
select top 3 * from Weeks where [week] <= '201052' order by [week] desc
union all
select top 2 * from Weeks where [week] > '201052' order by [week]
--生成测试数据
create table nn(ID int,ar int)
insert into nn values('1','10')
insert into nn values('2','10')
insert into nn values('3','30')
insert into nn values('4','10')
insert into nn values('5','20')
insert into nn values('6','20')
insert into nn values('7','20')
insert into nn values('8','20')
go/*中位函数*/
create function f_nn(@id int)
returns @T table(ID int,ar int)
as
begin
declare @i int
set @i = @id
insert into @T
select ID,ar from nn where ID between @i-3 and @i+3
return
end
go--查询
select * from dbo.f_nn(5)drop function f_nn
drop table nn
--也可以定义取值范围
create function f_nn(@id int,@nn int)
``
``
``
``
select ````` between @i-@nn and @i+@nn
if object_id ('weeks') is not null drop table weeks
go
create table Weeks(id int identity,[week] varchar(6))
insert into Weeks values('201049')
insert into Weeks values('201050')
insert into Weeks values('201051')
insert into Weeks values('201052')
insert into Weeks values('201101')
insert into Weeks values('201102')
insert into Weeks values('201103')
insert into Weeks values('201104')
godeclare @a char(6)
declare @i int
set @a='201052' --set what u want to find
select @i=id from weeks
where week=@a
select week from weeks
where id between (@i-2) and (@i+2)/*
week
------
201050
201051
201052
201101
201102(所影响的行数为 5 行)*/