Один метод состоит в том, чтобы вычислить ранг для «x» и сравнить его с рангом для каждой строки:
select c.*
from (select max(case when id = @x then rank end) over () as x_rank
from (select c.*, rank() OVER (ORDER BY score DESC ) as rank
from client c
) c
) c
where rank >= x_rank - 5 and rank <= x_rank + 5;
Обратите внимание, что это может не вернуть ровно 11 строк, если у вас есть связи.
Если вы хотите ровно 5 до и после плюс все строки с одинаковым счетом:
with c as (
select max(case when id = @x then rank end) over () as x_rank
from (select c.*, rank() OVER (ORDER BY score DESC ) as rank
from client c
) c
)
(select c.*
from c
where rank < x_rank
order by rank desc
limit 5
) union all
(select c.*
from c
where rank = x_rank
) union all
(select c.*
from c
where rank > x_rank
order by rank asc
limit 5
) ;