1. mysql 8.0 版本以上 写法例子:
SELECT
demo.idx,
demo.modtime,
demo.id,
demo.rank_no
FROM
(
SELECT
id,
ROW NUMBER() OVER (ORDER BY idx, modtime desc, id) as rank_no
FROM
demo where 1=1
) demo
WHERE demo.rank_no in(
select rank_no + 1 from (
SELECT
id,
ROW NUMBER() OVER (ORDER BY idx, modtime desc, id) as rank_no
FROM
demo where 1=1
) b where b.id = #{current_id}
);
2. mysql 8.0 版本以下 写法例子:
set @rank=0;
set @rank1=0;
select a.* from (
select
demo.idx,
demo.modtime,
demo.id,
@rank := @rank + 1 as rank_no
from (
select * from demo
where 1=1
order by idx desc, modtime desc, id
) demo
)a
where a.rank_no in (
select rank_no + 1 from(
select
demo.id,
@rank1 := @rank1 + 1 as rank_no
from (
select * from demo
where 1=1
order by idx, modtime desc, id
) task) b WHERE b.id = #{current_id}
)