有一个表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多万,所以功能和性能都要考虑!
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多万,所以功能和性能都要考虑!
order by (case when datediff(day,addTime,getdate())<=3
then 0
else 1
end
)
,Type
,addTime desc
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
我觉得好象只能这么做了,盼望高手给出效率更高的方法
老兄这样写不对呀,TO: ladOnTheBrinkOfRage(愤怒边缘的青年)
肯定要分页的呀!
主要是很复杂,查询条件很多!
再结合分页就可以了!
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