Как разбить строки таблицы на фрагмент фиксированного размера в Oracle - PullRequest
1 голос
/ 15 апреля 2020

У меня есть большая таблица 1 миллион + строк со столбцом цифр c в качестве первичного ключа. Я пытался запросить Oracle sql, чтобы получить разделение по размеру, скажем, 500. Таким образом, у меня есть своего рода сегменты, которые имеют 500 записей в каждом и дают их максимальные и минимальные значения в этом сегменте. пример данных

pk_column column1 column2 column3
1002      abcd    1234    15-apr-20
1004      efgh    3435    14-apr-20
1007      ijkl    8855    16-apr-20
....
....
....
2002      asdf    8565    17-apr-20
2005      efgh    5894    14-apr-20   

желаемый результат примерно такой: что ни один элемент не является фиксированным. Поскольку количество элементов постоянно меняется, я не могу найти способ динамического вычисления количества сегментов и использовать его в оконной функции NTILE или WIDTH_BUCKET. Использование функций LEAD и LAG в иерархическом порядке было очень запутанным. Кто-нибудь может подсказать, как с этим бороться.

1 Ответ

0 голосов
/ 15 апреля 2020

Вы можете использовать аналитическую функцию ROW_NUMBER следующим образом:

SELECT
    RN   AS BUCKET_NO,
    COUNT(1) AS NO_OF_ELEMENT,
    MIN(PK_COLUMN) AS MIN_VALUE,
    MAX(PK_COLUMN) AS MAX_VALUE
FROM
    ( SELECT T.*,
            MOD(ROW_NUMBER() OVER(ORDER BY PK_COLUMN) - 1, 500) + 1 RN
        FROM YOUR_TABL T
    )
GROUP BY RN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...