Информация
На главную Главная

Мой t-cards.ru
Войти Войти
Зарегистрироваться Регистрация

Разное
Форум Форум
Вернуться Форумы на t-cards.ru> Hard"n"Soft
Логин
Пароль
Регистрация Участники Поиск >> FAQ


Сообщения в теме: "SQL - интересная задачка на получение непрерывных ..."
14.12.2005 13:01
Admin

Регистрация: 05.10.2005
Проживание: Москва
Сообщения: 284
По умолчаниюSQL - интересная задачка на получение непрерывных интервалов

Дано:
Есть таблица например beg_end с полями begid и endid.
В ней большим списком хранятся интервалы, например вот такие данные:
0           19
20           39
80           99
100           119
120           139
160           179
60           79

Задача:
Получить список непрерывных интервалов и кол-ва в интервале, не используя циклы (ну для данного случая такой результат в формате начало-конец-количество):
0           39           40
60           139           80
160           179           20

Решение:

SELECT
          IDENTITY(INT,1,1) AS id,
          t1.begid
INTO
          #tmp1
FROM
          beg_end t1
          LEFT JOIN beg_end t2
                     ON t1.begid = t2.endid + 1
WHERE
          t2.endid IS NULL
ORDER BY
          t1.begid

SELECT
          IDENTITY(INT,1,1) AS id,
          t1.endid
INTO
          #tmp2
FROM
          beg_end t1
                     LEFT JOIN beg_end t2
                                ON t1.endid = t2.begid - 1
WHERE
          t2.endid IS NULL
ORDER BY
          t1.endid

SELECT
          t1.begid,
          t2.endid,
          t2.endid - t1.begid + 1 AS qty
FROM
          #tmp1 t1
                     INNER JOIN #tmp2 t2
                                ON t1.id = t2.id

Как это ни удивительно, работает! Честно - сам удивлися.