Хранимая процедура для группировки номеров

Рейтинг: 0Ответов: 1Опубликовано: 16.10.2014

Есть таблица с номерами http://dl1.joxi.net/drive/0004/3643/302651/141016/046b8a208c.jpg. Нужно получить список, содержащий непрерывные диапазоны.

Т.е. если номера идут списком 4525345345345345,4525345345345346,4525345345345347 группируется в диапазон 4525345345345345-4525345345345347, далее следующий диапазон. Если номер в диапазоне один, то передается одним номером.

Есть какие-то типовые примеры реализации такой задачи или соображения, как написать?

Ответы

▲ 1

У меня получилось вот так:

WITH R (N, RN) AS
(
    SELECT
        TT.N
        ,ROW_NUMBER() OVER (ORDER BY N) RN
    FROM
        tmp_table TT
)
SELECT
    R.N start_periaod
    ,(
        SELECT
            MAX(R1.N)
        FROM
            R R1
        WHERE
            R1.N > R.N
            AND (R1.N - R.N) = (R1.RN - R.RN)
    ) end_period
FROM
    R
WHERE
    NOT EXISTS
    (
        SELECT
            *
        FROM
            R R2
        WHERE
            (R.N - R2.N) = 1
    )