复杂排序后,用一条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