一张Weeks表,记录了周与日期的对应关系。 比如数据如下week
201049
201050
201051
201052  //52周是2010年的最后一周
201101
201102
201103
201104请问我通过一个变量,如201052,怎么查到他的最近5周情况,201050、201051、201052、201101,201102

解决方案 »

  1.   

    select 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
      

  2.   

    create table Weeks([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')
    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 行)
    */
      

  3.   

    不错,不知select top 100 percent * from是什么意思。 能否
    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]
      

  4.   


    --生成测试数据
    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
      

  5.   


    --也可以定义取值范围
    create function f_nn(@id int,@nn int)
    ``
    ``
    ``
    ``
    select ````` between @i-@nn and @i+@nn
      

  6.   


    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 行)*/