powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите написать запрос
9 сообщений из 9, страница 1 из 1
Помогите написать запрос
    #35134844
Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cреди идентификаторов моделей в таблице PC(id integer, model varchar(32)) имеются пропуски. Надо найти минимальный и максимальный "свободный" идентификатор в диапазоне между имеющимися максимальным и минимальным идентификаторами в таблице PC.
Если пропусков нет, выводить NULL.
Например, для последовательности идентификаторов моделей 1,2,5,7 результат должен быть 3 и 6
...
Рейтинг: 0 / 0
Помогите написать запрос
    #35134870
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос писать лень. Пишу алгоритм
1. Тупо в лоб, написать функцию. А там чего хочу, то и ворочу.
2. Минимальный свободный - найти минимальный ID, для которого не существует следующего (т.е. ID+1), но существуют большие, чем это ID
Для максимального - найти максимальный ID, для которого не существует ID-1, но существуют меньшие чем он.

Написал словами почти запрос. Переведите их на SQL (на английский) и запрос готов.
...
Рейтинг: 0 / 0
Помогите написать запрос
    #35134917
Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pamirЗапрос писать лень. Пишу алгоритм
1. Тупо в лоб, написать функцию. А там чего хочу, то и ворочу.
2. Минимальный свободный - найти минимальный ID, для которого не существует следующего (т.е. ID+1), но существуют большие, чем это ID
Для максимального - найти максимальный ID, для которого не существует ID-1, но существуют меньшие чем он.

Написал словами почти запрос. Переведите их на SQL (на английский) и запрос готов.

Спасибо конечно, но хотелось бы все таки скрипт видеть :-)
...
Рейтинг: 0 / 0
Помогите написать запрос
    #35134959
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЯнковскийСпасибо конечно, но хотелось бы все таки скрипт видеть :-)А думать не хотелось?
...
Рейтинг: 0 / 0
Помогите написать запрос
    #35134964
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamir ЯнковскийСпасибо конечно, но хотелось бы все таки скрипт видеть :-)А думать не хотелось?В догонку даю намёки
существует - exists
не существует - not exists.
Это всё, что вам нужно. Ну и знания об SQL
...
Рейтинг: 0 / 0
Помогите написать запрос
    #35134977
Янковский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pamir ЯнковскийСпасибо конечно, но хотелось бы все таки скрипт видеть :-)А думать не хотелось?

Нужен скрипт. Так не ясно до конца!
Кстати, для 1,2,5,7,11,12
Результат должен быть 3 и 10, как мне кажется :-)
...
Рейтинг: 0 / 0
Помогите написать запрос
    #35134987
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЯнковскийНужен скрипт.Ну ждите тех, кто будет работать за Вас.
...
Рейтинг: 0 / 0
Помогите написать запрос
    #35135335
N&V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
N&V
Гость
SELECT (MIN(id)||', '|| MAX(id)) as
FROM generate_series(1, 20) as q(id)
WHERE ID NOT IN (SELECT *
FROM generate_series(20,1,-2) as q(id))
дальше сам
...
Рейтинг: 0 / 0
Помогите написать запрос
    #35135363
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть ещё такой вариант, с self-join, правда он более "навороченный" - ищет границы всех дырок:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
seb=> create table tbl (id serial, val int);
NOTICE:  CREATE TABLE создаст подразумеваемую последовательность "tbl_id_seq" для serial-колонки "tbl.id"
CREATE TABLE
seb=> insert into tbl values (default,  1 );
INSERT  0   1 
seb=> insert into tbl values (default,  2 );
INSERT  0   1 
seb=> insert into tbl values (default,  5 );
INSERT  0   1 
seb=> insert into tbl values (default,  7 );
INSERT  0   1 
seb=> insert into tbl values (default,  11 );
INSERT  0   1 
seb=> insert into tbl values (default,  12 );
INSERT  0   1 

seb=> select l.val +  1  as start, min(fr.val) -  1  as stop from tbl as l
    left outer join tbl as r on l.val = r.val -  1 
    left outer join tbl as fr on l.val < fr.val
where r.val is null and fr.val is not null
group by l.val, r.val
order by  1 ;
 start | stop
-------+------
      3  |     4 
      6  |     6 
      8  |    10 
( 3  rows)

код запроса честно нашёл в интернете на
http://www.xaprb.com/blog/2005/12/06/find-missing-numbers-in-a-sequence-with-sql/


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите написать запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]