当前位置: 代码迷 >> Sql Server >> 复杂排序后,用一条SQL语句找出特定条数据的前一条数据或后一条数据.该怎么解决
  详细解决方案

复杂排序后,用一条SQL语句找出特定条数据的前一条数据或后一条数据.该怎么解决

热度:76   发布时间:2016-04-27 17:43:22.0
复杂排序后,用一条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
  相关解决方案