Oracle SQL FETCH NEXT в нескольких строках - PullRequest
0 голосов
/ 04 июля 2018

У меня есть оператор SQL, который выбирает следующие 20 строк из таблицы. В таблице есть поле SERIES_ID, которое содержит значения, которые могут использоваться несколькими строками в таблице, например ::100100

MY_TABLE
PRIMARY_KEY |  TEXT_FIELD | SERIES_ID
===================================
1           | sdfdsfdsfds |    1001
2           | sdafsdfdf   |    1002
3           | sdffghhjhj  |    1002
4           | rttrytrytyu |    1002
5           | qweqwret    |    1003
6           | gvcbvcbcv   |    1003

SELECT 
    PRIMARY_KEY, 
    TEXT_FIELD, 
    SERIES_ID
FROM MY_TABLE 
OFFSET 0 
FETCH NEXT 3 ROWS ONLY;

То, что я хотел бы сделать, - это изменить мой оператор SQL, чтобы вместо выборки следующего количества строк X он получал следующее количество SERIES_ID из таблицы. Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Во-первых, вы всегда должны использовать ORDER BY с FETCH FIRST. Таблицы SQL и наборы результатов (без ORDER BY) представляют собой неупорядоченные наборы. Поэтому результаты могут быть нестабильными.

Теперь, это не совсем то, что вы просите, но оно может делать то, что вы хотите. Oracle поддерживает опции WITH TIES для FETCH NEXT. Это позволит вам получить все данные для последнего идентификатора серии:

SELECT PRIMARY_KEY, TEXT_FIELD, SERIES_ID
FROM MY_TABLE 
ORDER BY SERIES_ID
OFFSET 0 FETCH NEXT 3 ROWS ONLY WITH TIES;
0 голосов
/ 04 июля 2018

Вам необходимо использовать аналитическую функцию (например, DENSE_RANK()), чтобы пометить значения ряда числом, а затем использовать его в предложении where, что-то вроде:

SELECT primary_key,
       text_field,
       series_id
FROM   (SELECT primary_key,
               text_field,
               series_id,
               DENSE_RANK() OVER (ORDER BY series_id) dr
        FROM   my_table)
WHERE  dr <= 3;

Не похоже на то, что можно получить доступ к значениям в OFFSET / FETCH, поэтому вам придется использовать diff_rank для разбивки на страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...