Выбрать указанную строку из нескольких строк, возвращаемых методом select - PullRequest
0 голосов
/ 03 марта 2020

У меня есть оператор выбора, который возвращает несколько строк. Мне нужно выбрать конкретную из этих строк. Я хотел бы написать что-то вроде

SELECT * FROM ( SELECT * FROM table WHERE x IS y ) WHERE row_in_selected_rows IS n;

Возможно ли это?

Обратите внимание, что я не могу использовать rowid из исходной таблицы, потому что у меня есть индекс нужной строки в строках возвращается из первого оператора выбора, а не из индекса в исходной таблице.

1 Ответ

0 голосов
/ 03 марта 2020

Вы можете использовать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...