这样的置顶SQL如何写

yjdabc 2009-07-20 09:26:35
现有文章表table,结构如下:
[id] [int] IDENTITY(1,1)
[title] 文章标题
[zd_id] 置顶标识,0代表不置顶,大于0标识此标题置顶,置顶顺序按数字大小排列,因此每置顶一篇文章,它的zd_id就比原来最大的zd_id大0.01。
[zd_days] 置顶天数
insert_time] 插入日期,默认是getdate()

我想到的处理方式如下:
如果zd_id>0 同时 insert_time+zd_days>现在 进入置顶,然后再根据zd_id大小排序
如果zd_id>0 但 insert_time+zd_days<现在 不置顶
如果zd_id=0 不置顶

但SQL语句不会写,请诸位大侠看看!


...全文
307 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tomzzu 2009-07-20
  • 打赏
  • 举报
回复


select *
from
(select (case when zd_id>0 and dateadd(day, zd_days, insert_time)>getdate() then zd_id
when zd_id>0 and dateadd(day, zd_days, insert_time)<getdate() then 0
when zd_id=0 then -1
else -2
end) as 排序列, *
from [table]
)
order by 1 desc
zhaoyh0530 2009-07-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sdhdy 的回复:]
CSDN真是越来越好了,发完帖子连是否成功都不提示了,省了。。。。。。。。。
[/Quote]就是的 不知道发送成功不 老发重复答复
feixianxxx 2009-07-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yjdabc 的回复:]
大家的写法我明白了,但如果不是置顶文章,或者过了置顶时间,我新闻按照insert_time 的倒序排列啊?

[/Quote]
select * from tablename order by case when dateadd(dd,zd_days,insert_time)>getdate() 
then zd_id else insert_time end desc
jwdream2008 2009-07-20
  • 打赏
  • 举报
回复
select * from tablename order by case when dateadd(dd,zd_days,insert_time)>getdate() 
then zd_id else insert_time end desc
yjdabc 2009-07-20
  • 打赏
  • 举报
回复
大家的写法我明白了,但如果不是置顶文章,或者过了置顶时间,我新闻按照insert_time 的倒序排列啊?
sdhdy 2009-07-20
  • 打赏
  • 举报
回复
CSDN真是越来越好了,发完帖子连是否成功都不提示了,省了。。。。。。。。。
jwdream2008 2009-07-20
  • 打赏
  • 举报
回复
select * from tablename order by case when dateadd(dd,zd_days,insert_time)>getdate() 
then zd_id end desc

修正楼上!
sdhdy 2009-07-20
  • 打赏
  • 举报
回复
select * from tb order by 
case when zd_id>0 and dateadd(dd,zd_days,insert_time)>getdate() then zd_id
when zd_id>0 and dateadd(dd,zd_days,insert_time)<getdate() then -1
when zd_id=0 then -10 end desc
SQL77 2009-07-20
  • 打赏
  • 举报
回复
select * from tb 
order by
case when zd_id>0 and DATEDIFF(dd,getdate(),insert_time)>0 THEN 0 ELSE zd_id END
jwdream2008 2009-07-20
  • 打赏
  • 举报
回复
select * from tablename order by case when dateadd(dd,zd_days,insert_time)>getdate() 
then zd_id end desc

修正!
jwdream2008 2009-07-20
  • 打赏
  • 举报
回复
select * from tablename order by case when dateadd(dd,zd_days,insert_time)>getdate() 
then zd_id end desc
sdhdy 2009-07-20
  • 打赏
  • 举报
回复
select * from tb order by case when zd_id>0 and 
dateadd(dd,zd_days,insert_time)>getdate() then zd_id else -1 end desc
sdhdy 2009-07-20
  • 打赏
  • 举报
回复
select * from tb order by case when zd_id>0 and 
dateadd(dd,zd_days,insert_time)>getdate() then zd_id else -1 end desc
jiangshun 2009-07-20
  • 打赏
  • 举报
回复
select * from tablename order by case when dateadd(dd,zd_days,insert_time)>getdate() 
then zd_id desc end
mousefog 2009-07-20
  • 打赏
  • 举报
回复
up
sdhdy 2009-07-20
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jwdream2008 的回复:]
SQL codeselect*from tablenameorderbycasewhendateadd(dd,zd_days,insert_time)>getdate()then zd_idelse insert_timeenddesc
[/Quote]
.......

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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