Суммарное значение суммы 1 и сумма сброса при достижении 0 SQL - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь выполнить запрос ниже, но он не работает.

 SELECT *,
   CASE WHEN x = 1 
   THEN ROW_NUMBER() OVER(PARTITION BY id ORDER BY date)  
   ELSE 0 END AS y

Ожидаемый результат:

  x   y
  1   1
  1   2
  1   3
  0   0
  1   1
  1   2

Как мне этого добиться?я все еще хочу сохранить 0 в столбце y

1 Ответ

0 голосов
/ 16 ноября 2018

Подсчитайте количество нулей до каждого значения, а затем используйте это для группировки.Конечное перечисление использует row_number():

select t.*,
       (case when x = 0 then 0
             else row_number() over (partition by x, grp order by date)
        end) as y
from (select t.*, countif(x = 0) over (order by date) as grp
      from t
     ) t
...