Thread: Вопрос по нумерации
Есть таблица. Есть столбец Х .
Необходимо внести строку так, чтобы номер, попадаемый в Х был минимальным уникальным.
Например, есть строки: 1,2,3,4,6,7,9
Значит новая строка должна быть с номером 5
Как это сделать максимально быстро?
На алгоритмах есть такое:
http://algolist.manual.ru/olimp/poi_sol.php#a10 Thursday, 27 August 2015, 06:26PM +03:00 from Владимир Комаров <vlads@sibnet.ru>:
Есть таблица. Есть столбец Х .
Необходимо внести строку так, чтобы номер, попадаемый в Х был минимальным уникальным.
Например, есть строки: 1,2,3,4,6,7,9
Значит новая строка должна быть с номером 5
Как это сделать максимально быстро?
Есть таблица. Есть столбец Х .
Необходимо внести строку так, чтобы номер, попадаемый в Х был минимальным уникальным.
Например, есть строки: 1,2,3,4,6,7,9
Значит новая строка должна быть с номером 5
Как это сделать максимально быстро?
delete from t;
insert into t values (1), (2), (3), (4), (6), (7), (9);
with q as (select id from t order by id desc limit 1),
s as (select g as id from q, generate_series(1, q.id) as g),
e as (
select id from s
except
select id from t
)
select id from e
order by id
limit 1
Есть таблица. Есть столбец Х .
Необходимо внести строку так, чтобы номер, попадаемый в Х был минимальным уникальным.
Например, есть строки: 1,2,3,4,6,7,9
Значит новая строка должна быть с номером 5
Как это сделать максимально быстро?
Разобрался сам:
Оказалось проще простого:
SELECT max(x)+1 INTO n
SELECT xx INTO res FROM generate_series(2,n) xx
WHERE xx NOT IN (SELECT x FROM tbl) LIMIT 1
From: Владимир Комаров [mailto:vlads@sibnet.ru]
Sent: Thursday, August 27, 2015 11:17 PM
To: 'Alexey Vasiliev' <leopard_ne@inbox.ru>
Subject: RE: [pgsql-ru-general] Вопрос по нумерации
Спасибо, но этот вариант я знаю:
Сделать строку str:=1,2,3,4…n
Где SELECT max(x)+1 INTO n
А ПОТОМ нечто подобное:
SELECT xx INTO res from (SELECT regexp_split_to_table(str) xx) WHERE xx NOT IN (SELECT x FROM tbl) LIMIT 1
Но хотелось более элегантный способ формирования таблицы str или (regexp_split_to_table(str))
From: Alexey Vasiliev [mailto:leopard_ne@inbox.ru]
Sent: Thursday, August 27, 2015 10:42 PM
To: Владимир Комаров <vlads@sibnet.ru>
Cc: pgsql-ru-general@postgresql.org
Subject: Re: [pgsql-ru-general] Вопрос по нумерации
На алгоритмах есть такое:
http://algolist.manual.ru/olimp/poi_sol.php#a10
Thursday, 27 August 2015, 06:26PM +03:00 from Владимир Комаров <vlads@sibnet.ru>:
Есть таблица. Есть столбец Х .
Необходимо внести строку так, чтобы номер, попадаемый в Х был минимальным уникальным.
Например, есть строки: 1,2,3,4,6,7,9
Значит новая строка должна быть с номером 5
Как это сделать максимально быстро?