• Авторизация


Задачка по SQL 28-05-2007 21:40 к комментариям - к полной версии - понравилось!


В реляционной БД есть таблица с последовательностью натуральных чисел. Необходимо написать SQL запрос, выбирающий данные о всех пропусках чисел в данной последовательности, в виде двух колонок: первая колонка = начало интервала с пропущеными числами, вторая колонка = конец интервала.

Пример:
Исходная таблица:
1
3
4
7
8
12


Результат выполнения запроса:
2, 2
5, 6
9, 11
вверх^ к полной версии понравилось! в evernote
Комментарии (6):
prog1c 29-05-2007-08:50 удалить
ВЫБРАТЬ
Справочник_1.Код + 1 КАК Поле2,
МИНИМУМ(Справочник_2.Код - 1) КАК Поле3
ИЗ
Справочник.Справочник1 КАК Справочник_1
ЛЕВОЕ СОЕДИНЕНИЕ
Справочник.Справочник1 КАК Справочник_2
ПО ИСТИНА
ГДЕ
(НЕ Справочник_1.Код + 1 В
(ВЫБРАТЬ
Справочник1.Код
ИЗ
Справочник.Справочник1 КАК Справочник1))
И
(НЕ Справочник_1.Код В
(ВЫБРАТЬ
МАКСИМУМ(Справочник1.Код)
ИЗ
Справочник.Справочник1 КАК Справочник1))
И
(НЕ Справочник_2.Код - 1 В
(ВЫБРАТЬ
Справочник1.Код
ИЗ
Справочник.Справочник1 КАК Справочник1))
И
(НЕ Справочник_2.Код В
(ВЫБРАТЬ
МИНИМУМ(Справочник1.Код)
ИЗ
Справочник.Справочник1 КАК Справочник1))
И
(Справочник_1.Код + 1 <= Справочник_2.Код - 1)
СГРУППИРОВАТЬ ПО
Справочник_1.Код
prog1c 29-05-2007-08:52 удалить
В T-SQL сам переведешь. :)
prog1c 17-06-2007-12:33 удалить
Что-то я решил вернуться к ней, т.к. загадал ее парочке программеров.
Вот в sql-е:
[700x560]
prog1c 18-06-2007-12:09 удалить
А вот оптимизированный в 1с:
ВЫБРАТЬ
Справочник_1.Код + 1 КАК Поле1,
МИНИМУМ(Справочник_2.Код - 1) КАК Поле2
ИЗ
Справочник.Справочник1 КАК Справочник_1,
Справочник.Справочник1 КАК Справочник_2
ГДЕ
Справочник_1.Код < Справочник_2.Код
СГРУППИРОВАТЬ ПО
Справочник_1.Код
ИМЕЮЩИЕ
МИНИМУМ(Справочник_2.Код)>Справочник_1.Код + 1


Комментарии (6): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Задачка по SQL | dimzon541 - Поток не замутненного разумом сознания... | Лента друзей dimzon541 / Полная версия Добавить в друзья Страницы: раньше»