Вы можете использовать ROW_NUMBER()
оконную функцию:
select col1, col2, ....
from (
SELECT *, row_number() over() rn
FROM table
WHERE x IS y
) t
where t.rn = 4
, но при этом порядок строк, возвращаемых из запроса, не определен, поэтому 4-я строка может быть любой строкой. Правильный путь будет:
select col1, col2, ....
from (
SELECT *, row_number() over(order by somecolumn) rn
FROM table
WHERE x IS y
) t
where t.rn = 4
Вы также можете использовать OFFSET
с LIMIT
:
SELECT * FROM ( SELECT * FROM table WHERE x IS y )
LIMIT 1 OFFSET 3;
, который пропускает первые 3 строки и возвращает только 4-й, но опять же LIMIT
и OFFSET
должны использоваться с ORDER BY
, например:
SELECT * FROM ( SELECT * FROM table WHERE x IS y )
ORDER BY somecolumn
LIMIT 1 OFFSET 3;