Найти все непрерывные диапазоны длины N
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.10.10 07:29
Оценка:
Что-то я стал туповат. Задача:
1. Есть таблица, в которой хранится, допустим, поле Value. И, допустим, уникальный идентификатор ID.
2. Есть задача: найти блок из N непрерывных значений.
3. Точнее, найти все такие блоки. (Очевидно, достаточно найти голову или хвост блока — остальные значения получаются тривиально).

То есть, из таблички 1, 2, 3, 4, 6, 7, 8, 9 должны получаться вот такие ответы:
Для N = 1: сама табличка
Для N = 2: (1, 2), (2, 3), (3, 4), (6, 7), (7, 8), (8, 9)
Для N = 3: (1, 2, 3), (2, 3, 4), (6, 7, 8), (7, 8, 9)
Для N = 4: (1, 2, 3, 4), (6, 7, 8, 9)
Для N = 5 блоков нет

Решение нужно для MS SQL (2005 и выше) и для Postgres.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.