Нарастающий count over partition by

Major_Egor
Дата: 26.10.2015 12:52:53
Здравствуйте, озадачился следующим вопросом.
Например есть таблица
WITH t AS (SELECT 1 month, null value, 11 id FROM  dual
           UNION ALL
           SELECT 2 month, 678 value, 11 id FROM  dual
           UNION ALL
           SELECT 3 month, 426 value, 11 id FROM  dual 
           UNION ALL
           SELECT 1 month, null value, 22 id FROM  dual 
           UNION ALL
          SELECT 2 month, null value, 22 id FROM  dual
          UNION ALL
           SELECT 3 month, 100 value, 22 id FROM  dual
           )
           
select t.month,t.value,t.id  FROM t


Как сделать count over partition by , но нарастающий с таким резульаттом?
WITH t AS (SELECT 1 month, null value, 11 id, 0 count_mon FROM  dual
           UNION ALL
           SELECT 2 month, 678 value, 11 id, 1 count_mon FROM  dual
           UNION ALL
           SELECT 3 month, 426 value, 11 id, 2 count_mon FROM  dual 
           UNION ALL
           SELECT 1 month, null value, 22 id, 0 count_mon  FROM  dual 
           UNION ALL
          SELECT 2 month, null value, 22 id, 0 count_mon  FROM  dual
          UNION ALL
           SELECT 3 month, 100 value, 22 id, 1 count_mon FROM  dual
           )
           
select t.month,t.value,t.id, count_mon  FROM t;
Добрый Э - Эх
Дата: 26.10.2015 13:03:37
Major_Egor,

start_of_group тебе нужен, однако
hardhouse
Дата: 26.10.2015 13:03:58
WITH t AS (SELECT 1 month, null value, 11 id, 0 count_mon FROM  dual
           UNION ALL
           SELECT 2 month, 678 value, 11 id, 1 count_mon FROM  dual
           UNION ALL
           SELECT 3 month, 426 value, 11 id, 2 count_mon FROM  dual 
           UNION ALL
           SELECT 1 month, null value, 22 id, 0 count_mon  FROM  dual 
           UNION ALL
          SELECT 2 month, null value, 22 id, 0 count_mon  FROM  dual
          UNION ALL
           SELECT 3 month, 100 value, 22 id, 1 count_mon FROM  dual
           )
           
select t.month,t.value,t.id, count_mon, sum(case when t.value is null then 0 else 1 end) over (partition by id order by t.value desc nulls first) sm FROM t;


?
Elic
Дата: 26.10.2015 13:06:09
Major_Egor
count over partition by
Именно все эти буквы и нужно использовать. Продолжай, ты на верном пути.
anvano
Дата: 26.10.2015 13:07:19
А почему ORDER BY по VALUE ? Нарастающий итог же по месяцам нужен, не?

SUM(DECODE(t.value,NULL,0,1)) OVER(PARTITION BY t.id ORDER BY t.month)
Elic
Дата: 26.10.2015 13:07:59
Добрый Э - Эх
start_of_group тебе нужен, однако
Не count(value) ?
Major_Egor
Дата: 26.10.2015 13:08:41
hardhouse,
хм, все сработало как следует, большое спасибо за помощь :))
hardhouse
Дата: 26.10.2015 13:10:16
Major_Egor,

только нужно правильный order by написать
Добрый Э - Эх
Дата: 26.10.2015 13:11:25
Elic,

х.з., может у него сброс данных в пределах одной группы случается, а ТС , как всегда, привел магическо-нерепрезентативный набор тестовых данных
Major_Egor
Дата: 26.10.2015 13:26:10
Добрый Э - Эх,
Простите, не нагуглил об "start_of_group". Что я мог не учесть?