有一个表Info,结构如下:
   Id          int(主键)
   Name        nvarchar(50)
   Type        smallint
   addTime     datetime
,其中 Type 是表示信息的等级,分为1,2,3三个等级。
现在求一排序的存储过程,功能如下:
当 Type=1 时,在三天内的数据优先往前排,三天后就按普通级别(即Type=3)以addTime 倒序排序,
当 Type=2 时也一样,但其优先级低于 Type=1。简单的说就是:三天内的数据先按 Type 顺序排列,再按 addTime 倒序排列。三天后的数据就只按 addTime 倒序排列。因为在项目中的表,数据量比较大,目前有50多万,所以功能和性能都要考虑!

解决方案 »

  1.   

    select * from info
    order by (case when datediff(day,addTime,getdate())<=3
                   then 0
                   else 1
              end
             )
             ,Type
             ,addTime desc
      

  2.   

    create procedure up_sort
    as
    create table #Info
    (
     Id int,
    name nvarchar(50),
    Type        smallint,
    addTime  datetime 
    )
    insert into #Info select * from info where dateadd(dd,3,addTime)>getdate()
    order by type desc,addtime desc 
    insert into #Info select * from info where dateadd(dd,3,addTime)<getdate()
    order by addtime desc
    select * from #Info
    drop table #Info
    go
    我觉得好象只能这么做了,盼望高手给出效率更高的方法
      

  3.   

    http://dev.csdn.net/article/43/43936.shtm
      

  4.   

    TO: vivianfdlpw() ( ) 
        老兄这样写不对呀,TO: ladOnTheBrinkOfRage(愤怒边缘的青年) 
       肯定要分页的呀!
       主要是很复杂,查询条件很多!
      

  5.   

    同意  ladOnTheBrinkOfRage(愤怒边缘的青年)  ,
      再结合分页就可以了!
      

  6.   

    用同步处理:
    Create Storeprocedure test()ASdeclare @mydate datetime
    select name,type,@mydate =addtime from table where dateadd(dd,3,addTime)>getdate() order by addtime
    union all
    select * from table where addtime<>@mydate order by type