Добавочные значения при выполнении условия в операторе if - PullRequest
0 голосов
/ 26 марта 2020

Я застрял на этом довольно долгое время, и я не могу понять это. Вот моя проблема: у меня есть два логических столбца condition_1 и condition_2, и я хочу создать третий столбец inc, где значение увеличивается каждый раз, когда выполняется это условие if condition_2 is false and lead(condition_1) over(partition by column_x order by column_y) is false.

Результат будет выглядеть примерно так:

column_x     column_y     condition_1   condition_2     inc
A            12/03/2020   true          true            1
A            13/03/2020   true          false           1
A            14/03/2020   false         false           2
A            15/03/2020   false         true            3
A            16/03/2020   true          false           3
A            17/03/2020   false         true            4

Делать что-то вроде

  • if(condition_2 is false and lead(condition_1) over(partition by column_x order by column_y) is false, lag(inc) over(partition by column_x order by column_y) + 1, lag(inc) over(partition by column_x order by column_y)) inc obv не работает, поскольку inc еще не существует в то время запроса и выполнение

  • if(condition_2 is false and lead(condition_1) over(partition by column_x order by column_y) is false, + 1, + 0) inc не будет инкрементным, поскольку будет сбрасываться до 0 для каждой строки.

Кто-то есть идеи?

Спасибо большое!

1 Ответ

1 голос
/ 26 марта 2020

Вы описываете эту формулу:

select t.*,
       countif( (not condition_2) and (not next_1)) over (partition by column_x order by column_y)
from (select t.*,
             lead(condition_1) over (partition by column_x order by column_y) as next_1
      from t
     ) t;

Если вы хотите, чтобы числа начинались с 1, вам нужно добавить «1» к значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...