Применить условие между строками одного столбца - PullRequest
0 голосов
/ 05 мая 2020

У меня есть таблица, в которой первый столбец - это время, которое увеличивается с шагом в 1 секунду. Во втором столбце в первой строке отображается код, с которого начался день. Это может быть любое значение от 1 до 5. Значение 0 (ноль) означает, что код не изменился. При изменении кода указывается время его изменения и номер, на который он изменился (таким образом, событие), но пока он остается неизменным, снова будет отображаться 0 (ноль).

enter image description here

Я намерен в любое время создать новый столбец с указанием текущего кода. До сих пор я делал это в Excel со следующими условиями и результатами:

enter image description here enter image description here

Есть ли способ применения этого условия Excel в запросе для создания этого нового столбца? Я тестировал операторы CASE WHEN и пытался реализовать в них функции Lag или Lead. Но пока ни один из них не смог применить то же значение предыдущей строки, когда событие равно 0 (нулю).

1 Ответ

0 голосов
/ 05 мая 2020

Если event всегда увеличивается, вы можете использовать окно max():

select time, event, max(event) over(order by time) code
from mytable

В противном случае это немного сложнее. Один из вариантов - создать группы с суммой окна:

select time, event, max(event) over(partition by grp order by time) code
from (
    select 
        t.*, 
        sum(case when event > 0 then 1 else 0 end) over(order by time) grp
    from mytable t
) t
...