У меня есть большая таблица действий, в которой указаны все действия, предпринятые по делу. некоторые из этих действий изменяют статус дела. Некоторые действия не изменяют статус дела и по сути должны быть статусом предыдущей ненулевой записи. образец:
caseID | datetime | action | status
1 1/1/2020 a OPEN
1 1/2/2020 B NULL
1 1/3/2020 G CLOSED
1 1/5/2020 T REOPEN
1 1/6/2020 H NULL
1 1/7/2020 H NULL
1 1/9/2020 G CLOSED
1 1/10/2020 J CLOSED
1 1/15/2020 P CLOSED
результат, которого я пытаюсь достичь, - это сгруппировать и прикрепить номер «сеанса» к набору дат, которые содержат диапазон дат от открытия ИЛИ повторного открытия ДО закрытия. Идея здесь в том, что если dateto равно NULL, то это текущий статус:
CaseID | status | datefrom | dateto | session
1 OPEN 1/1/2020 1/3/2020 1
1 CLOSED 1/3/2020 1/5/2020 1
1 REOPEN 1/5/2020 1/9/2020 2
1 CLOSED 1/9/2020 NULL 2
Я использую SQL 2014 Enterprise Edition и много дней ломал себе голову над этим ... помощь будет очень признательна. Я нашел несколько подсказок по stackoverflow, но ничего, что полностью удовлетворяет необходимый результат.
EDIT: вот лучший пример данных:
caseID | datetime | action | status
1 1/1/2020 a OPEN
1 1/2/2020 B REOPEN
1 1/3/2020 G CLOSED
1 1/5/2020 T REOPEN
1 1/6/2020 H NULL
1 1/7/2020 H NULL
1 1/9/2020 G CLOSED
1 1/10/2020 J CLOSED
1 1/15/2020 P CLOSED
1 1/16/2020 P WORKABLE
1 1/17/2020 P NULL
1 1/18/2020 P WORKABLE
1 1/19/2020 P WORKABLE
1 1/20/2020 P CLOSED
1 2/1/2020 o NULL
ОЖИДАЕМЫЙ ВЫХОД:
CaseID | status | datefrom | dateto | session
1 OPEN 1/1/2020 1/3/2020 1
1 CLOSED 1/3/2020 1/5/2020 1
1 REOPEN 1/5/2020 1/9/2020 2
1 CLOSED 1/9/2020 1/16/2020 2
1 WORKABLE 1/16/2020 1/20/2020 3
1 CLOSED 1/20/2020 NULL 3