急!!!一个数据查询时的问题,感觉有点难

泡泡鱼_ 2007-03-04 05:30:51
数据表A中有几个字段分别为:TopSatus(此字段决定发布的信息是否优先置顶,0为否,1为是),AddTime(信息发布时间)
要求根据TopStatus 和 AddTime 进行降序排列
基本查询语句为:
select * from A order by TopSatus desc,AddTime desc

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

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

分不多,请大家帮帮忙!!!
...全文
193 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡鱼_ 2007-03-04
  • 打赏
  • 举报
回复
marco08(天道酬勤),首先要谢谢您的回复

我刚刚测试的时候发现了另一个问题,我的要求是优先以TopStatus降序再AddTime降序

但是实际出来的结果却是把AddTime降序当成优先的了

我给您发了短消息了
泡泡鱼_ 2007-03-04
  • 打赏
  • 举报
回复
其实我本人已经用DATEADD(day, 3, AddTime)>=getdate()代替了!
marco08(天道酬勤)朋友的方法是可以的,我已经解决了
我是丁学 2007-03-04
  • 打赏
  • 举报
回复
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上做计算,效率可能低一些,而且不能使用索引
我是丁学 2007-03-04
  • 打赏
  • 举报
回复
晕,写错了,能不能删除自己的回复啊?
我是丁学 2007-03-04
  • 打赏
  • 举报
回复
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
泡泡鱼_ 2007-03-04
  • 打赏
  • 举报
回复
呵呵,又是这位热心的朋友!
marco08 2007-03-04
  • 打赏
  • 举报
回复
--try


select * from A
order by
case when TopSatus=1 and datediff(day, AddTime, getdate())<3 then 1 else 0 end desc,
AddTime desc

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧