日期:2014-05-18  浏览次数:20461 次

急!!!一个数据查询时的问题,感觉有点难
数据表A中有几个字段分别为:TopSatus(此字段决定发布的信息是否优先置顶,0为否,1为是),AddTime(信息发布时间)
要求根据TopStatus   和   AddTime   进行降序排列
基本查询语句为:
select   *   from   A   order   by   TopSatus   desc,AddTime   desc

我的问题是:对于信息置顶,要求只在发布信息过后的三天内有效!也就是说用户的信息置顶时,TopStatus字段的值应为1,但是三天后这条信息将变为普通信息不再置顶!

查询要求解决上面问题的同时又要遵守根据TopStatus   和   AddTime   进行降序排列的规则

分不多,请大家帮帮忙!!!


------解决方案--------------------
--try


select * from A
order by
case when TopSatus=1 and datediff(day, AddTime, getdate()) <3 then 1 else 0 end desc,
AddTime desc
------解决方案--------------------
select * from A where TopStatus=1 and AddTime> dateadd(dd,-3,getdate()) order by AddTime desc
union all
select * from A where AddTime <dataadd(dd,-3,getdate()) order by AddTime desc
------解决方案--------------------
marco08(天道酬勤) ( ) 信誉:100 Blog
select * from A
order by
case when TopSatus=1 and datediff(day, AddTime, getdate()) <3 then 1 else 0 end desc,
AddTime desc
-----------------------------------------
这个是不是可以使用 AddTime <dateadd(day,-3,getdate()) ?
用datediff时会每次在AddTime上做计算,效率可能低一些,而且不能使用索引