我在数据库中有这些数据:
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的行。
答案 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;