Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Суммирование sum () over() с условием (2-я серия)  [new]
Стало интересно
Guest
Всем привет!

Есть таблица. В таблице два поля (id, val). Id задает порядок строк (order by id), val содержит некое числовое значение.

На выходе охото получить следующее: для каждой исходной строки таблицы расчитать сумму значений VAL из предыдущих строк (в сортировке по ID), с условием, что в сумму должны учитываться лишь те предыдущие VAL, которые строго больше значения VAL из текущей строки.

Пример исходных данных и желаемый вид результата (поле sum$):
with tst as
(
  select 0 as id, 5 as val from dual union all
  select 1 as id, 4 as val from dual union all
  select 2 as id, 8 as val from dual union all
  select 3 as id, 3 as val from dual union all
  select 4 as id, 5 as val from dual union all
  select 5 as id, 4 as val from dual union all
  select 6 as id, 9 as val from dual union all
  select 7 as id, 7 as val from dual union all
  select 8 as id, 1 as val from dual union all
  select 9 as id, 4 as val from dual 
)
select t0.*
     , nvl((select sum(val) from tst t1 where t0.id > t1.id and t0.val < t1.val),0) as sum$
from   tst t0


P.S.
Есть устойчивое чувство. что задача должна решаться через диапазонные окна.
Тема Суммирование sum () over() с условием интенсивно курилась, но прозрение не пришло и применить к своей задаче не хватило ума... :(
11 июн 15, 12:44    [17759630]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование sum () over() с условием (2-я серия)  [new]
Elic
Member

Откуда:
Сообщений: 29976
подсчет деток
11 июн 15, 13:02    [17759777]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование sum () over() с условием (2-я серия)  [new]
Elic
Member

Откуда:
Сообщений: 29976
Как лутше получить сумму по всем узлам дерева
11 июн 15, 14:12    [17760360]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование sum () over() с условием (2-я серия)  [new]
isdenno
Member

Откуда:
Сообщений: 92
with tst as
(
  select 0 as id, 5 as val from dual union all
  select 1 as id, 4 as val from dual union all
  select 2 as id, 8 as val from dual union all
  select 3 as id, 3 as val from dual union all
  select 4 as id, 5 as val from dual union all
  select 5 as id, 4 as val from dual union all
  select 6 as id, 9 as val from dual union all
  select 7 as id, 7 as val from dual union all
  select 8 as id, 1 as val from dual union all
  select 9 as id, 4 as val from dual 
)
select t.id, sum (t.val) over (order by t.id range between unbounded preceding and current row)
from   tst t
11 июн 15, 15:58    [17761162]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование sum () over() с условием (2-я серия)  [new]
Elic
Member

Откуда:
Сообщений: 29976
isdenno, чукча писатель, а не читатель?
11 июн 15, 16:47    [17761474]     Ответить | Цитировать Сообщить модератору
 Re: Суммирование sum () over() с условием (2-я серия)  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
select id,val,smm
from   tst t0
model 
dimension by (id,val)
measures(val v, 0 smm)
rules update(
smm[any,any] = nvl(sum(v)[id<cv(),val>cv()],0)
)
order by id
;
11 июн 15, 17:10    [17761574]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить