Я пытаюсь создать фрагмент кода для использования предложения, зависящего от контекста.Свернуть исторические строки по статусу в SQL с помощью группы
Так что у меня есть что-то вроде Table1
Customer Status Date_FROM Date_TO
A 1 1.11.15 2.11.1
A 1 2.11.15 3.11.15
... ... ... ...
A 2 5.11.15 6.11.15
... ... ... ...
A 1 15.11.15 20.11.15
A 2 20.11.15 27.11.15
Так я получил клиентов меняющегося статус и наиболее временных рядов ежедневно состояния. Таким образом, в простом сценарии (всего 2 интервалов) я мог бы использовать подобный код:
select Customer, Status, min(Date_FROM), max(Date_TO)
from Table1
group by Customer, Status
Но что я хочу в более сложном сценарии
Table2
Customer Status Date_FROM Date_TO
A 1 1.11.15 5.11.15
A 2 5.11.15 15.11.15
A 1 15.11.15 20.11.15
A 2 20.11.15 27.11.15
Есть ли какая-то аналитической sql-функции, которая выполняет совокупность, пока статус (упорядоченный по Date_FROM) не изменяется?
Привет
Патрик
Мне было приятно, если у вас был [sqlfiddle] (http://sqlfiddle.com) для этого. –
Не знаете, на что именно вы нацелены, но «lag» может представлять интерес (сопоставление записи 'n' с' n-1' в заданном порядке, позволяющее идентифицировать, когда происходит изменение состояния), а также 'listagg' который объединяет значения столбца по всем строкам в наборе результатов, чтобы вы могли проверить, изменилась ли последовательность значений состояния. – collapsar
Возможно, вы можете использовать подзапрос с 'lag', который будет использоваться для отображения« это строка, в которой что-то изменилось », а затем извлечение этих строк с помощью WHERE. – marmarta