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

复杂排序后,用一条SQL语句找出特定条数据的前一条数据或后一条数据.
比如表:

aa     bb     cc

0       400     d
0       500     e  
1       300     c
1       700     b  
2       600     a

排序方式为aa   asc,bb   asc.其中aa不唯一,bb唯一.

我现在知道cc=c的这条数据.想找出它的前一条数据(即cc=e的那条数据)

怎么写??

------解决方案--------------------
select
top 1 b.*
from
表 a,表 b
where
a.cc= 'c ' and (a.aa> b.aa or (a.aa=b.aa and a.cc> b.cc))
order by
b.aa,b.bb
------解决方案--------------------
--找前一条数据(排序方式为aa asc,bb asc.其中aa不唯一,bb唯一)
select
top 1 b.*
from
表 a,表 b
where
a.cc= 'c ' and (a.aa> b.aa or (a.aa=b.aa and a.bb> b.bb))
order by
b.aa,b.bb
--找后一条数据(排序方式为aa asc,bb asc.其中aa不唯一,bb唯一)
select
top 1 b.*
from
表 a,表 b
where
a.cc= 'c ' and (a.aa <b.aa or (a.aa=b.aa and a.bb <b.bb))
order by
b.aa,b.bb


------解决方案--------------------
select top 1 b.* from 表 a,表 b
where a.cc= 'c ' and (a.aa*100000+a.bb> b.aa*100000+b.cc)
order by b.aa,b.bb
select top 1 b.* from 表 a,表 b
where a.cc= 'c ' and (a.aa*100000+a.bb <b.aa*100000+b.cc)
order by b.aa,b.bb