日期:2014-05-17  浏览次数:20626 次

查出currentId的上一个和下一个数据
根据currentId和@whereStr查询出上一个和下一个数据,只想到根据@whereStr和currentId获取附加行号,然后再根据行号(-1或+1)和@whereStr获取数据。
不过这样要分2次单独查询,前辈们有没有其他的写法。
谢谢!

------解决方案--------------------
SQL SERVER 2012 新增了错位查询的函数

但是2012之前的版本都是通过行号来查比较简单。
------解决方案--------------------
用exists可以实现,不过最好给出表结构和测试数据
------解决方案--------------------
如果是sql server 2005以后的版本,可以考虑使用row_number()窗口函数来实现,比较方便
------解决方案--------------------

;With T as (
select row_number() over (order by edittime desc ) as Row ,* from article 
)
,T2 AS (
SELECT * FROM t WHERE userid=77 and classid=5
)
--上一条
select * from T where Row = (select Row from T2) -1
UNION ALL
--下一条
select * from T where Row = (select Row from T2) +1


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

根据currentId和@whereStr查询出上一个和下一个数据,

符合条件的全部出来了。那么上一个和下一个就是不符合条件的?排序规则不一样,会取到不同的值。也有可能没有值?


感觉楼主表达不完整
------解决方案--------------------
select * from article a WHERE EXISTS
(SELECT 1 FROM 
(SELECT id FROM article  where userid=77 and classid=5) b
 WHERE a.id BETWEEN b.id-1 AND b.id+1) order by edittime desc 


我是来接分的。。。
------解决方案--------------------

select top 1 * from 表 where Id<@currentId order by id desc--上一條
uinon all
select top 1 * from 表 where Id>@currentId order by id asc--下一條