从查询中获取下一行

时间:2015-10-24 21:25:34

标签: mysql sql-order-by

我在数据库中有这些数据:

ID    col1    col2
32      2      0
31      2      0
76      1      0
12      0      0
10      0      0
25      0      1
20      0      1
28      0      2

这些数据来自此查询:

SELECT ID, col1, col2 
FROM tableA
ORDER BY col1 DESC, col2 ASC, ID DESC

一旦有了ID和col1值,我想得到这个查询的下一行。 是否可以使用唯一的查询来执行此操作?

重要信息:col1和col2不能同时为零。如果col1不为零,则col2为零,反之亦然。

编辑: 我正在使用MySQL。没有API的

让我们说,例如我有ID:31。然后我需要获得ID为76的行

如果我有ID 10,那么我需要ID为25的行。

1 个答案:

答案 0 :(得分:0)

这是一种方法,虽然我想知道是否有更简单的方法:

select a.*
from TableA a cross jooin
     (select a.*
      from TableA a
      where id = 31
     ) thea
where thea.col1 < a.col1 or
      thea.col1 = a.col1 and thea.col2 > a.col2 or
      thea.col1 = a.col1 and thea.col2 = a.col2 and thea.id < a.id
order by a.col1 DESC, a.col2 ASC, a.ID DESC
limit 1;

EDTI:

更简单的方法是使用变量:

select a.*
from (select a.*,
             (@rn := if(a.id = 31,
                        if(@found := 1, 1, 1),
                        if(@found = 1, @rn + 1, -1)
                       )
             ) as rn
      from tablea a cross join
           (select @rn := 0, @found := 0) params
      order by a.col1 DESC, a.col2 ASC, a.ID DESC
     ) a
where rn = 2;