Иногда при анализе данных возникает
задача выделения «цепочек» в выборке — то есть
упорядоченных последовательностей записей, для каждой из которых
выполняется некоторое условие.
Это может быть как условие от данных самой записи, так и сложное выражение относительно одной или нескольких предыдущих записей — например, длина интервала между близкими временными отсчетами.
Традиционные решения предусматривают разные варианты «self join», когда выборка соединяется с собой же, либо использование некоторых фактов «за пределами данных» — например, что записи должны иметь строго определенный шаг (N+1, «за каждый день», ...).
Первый вариант зачастую приводит к
квадратичной сложности алгоритма от количества записей, что
недопустимо на больших выборках, а второй
может легко «развалиться», если каких-то отсчетов в исходных данных вдруг не окажется.
Но эту задачу нам помогут эффективно решить
оконные функции в PostgreSQL.