SQL запрос, чтобы получить начальную и конечную позиции в зависимости от размера партии - PullRequest
1 голос
/ 25 марта 2020

У меня есть таблица A с идентификатором столбца как PK, наряду с другими столбцами. Эта таблица имеет 10M записей. Примерные данные в столбце идентификации приведены ниже:

ID
--
1
2
3
5
6
7
8
9
10

Примечание: нет 4. Он получил бы удаление.

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

идентификатор партии, начальный идентификатор, конечный идентификатор

, в котором требуется данные типа

batch id, start Id, end Id
1,1, 2  
2,3,5
3,6,7
4,8,9
5,10,10

Это с учетом размера пакета из 2. Размер партии настраивается.

Какой запрос я должен написать, чтобы сформировать таблицу выше, выполнив запрос к таблице A.

Заранее спасибо.

1 Ответ

2 голосов
/ 25 марта 2020

Вы можете использовать row_number() и арифметику c:

select floor((seqnum + 1) / 2) as batch, min(id), max(id)
from (select t.*, row_number() over (order by id) as seqnum
      from t
     ) t
group by floor((seqnum + 1) / 2)
...