Как получить каждую n-ю строку в таблице или как разбить подмножество таблицы на наборы или строки одинакового размера? - PullRequest
3 голосов
/ 23 апреля 2010

У меня есть таблица разнородных частей данных, идентифицированных первичным ключом (ID) и идентификатором типа (TYPE_ID). Я хотел бы иметь возможность выполнить запрос, который возвращает мне набор диапазонов для данного типа, разбитых на четные размеры страниц. Например, если существует 10000 записей типа «1», и я указываю размер страницы 1000, я хочу, чтобы 10 пар чисел возвращали значения, которые можно использовать в предложении BETWEEN в последующих запросах для запроса записей DB 1000 в время.

Моя первая попытка была примерно такой

select id, rownum from CONTENT_TABLE 
where type_id = ? and mod(rownum, ?) = 0

Но это не работает.

Ответы [ 3 ]

4 голосов
/ 23 апреля 2010
3 голосов
/ 23 апреля 2010

rownum «оценивается», когда выбранные записи возвращаются после оценивая where clause запроса выбора. Поэтому вам нужно выберите rownum в другом запросе. Я даю r в качестве псевдонима для rownum:

select id from (
  select 
    id, 
    rownum r
  from 
    CONTENT_TABLE 
   where type_id = ? 
)
where mod(r, ?) = 0
0 голосов
/ 02 февраля 2018

Привет Используйте ниже SQL, чтобы найти каждую n-ую строку в таблице:

SQL-запрос:

SELECT * 
FROM table_name
WHERE (ROWID,0) in (SELECT ROWID, MOD(ROWNUM, n)
FROM table_name);
Replace n with 2, 3, 4 , 5 ... 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...