Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 тонкости over(...order by...rows between...)  [new]
anonimus777
Guest
select col1, col2, col3, sum(col1) over(partition by col2 order by col3 rows between unbounded preceding and current row) as s
from   (select level col1, ceil(level * 0.3) as col2, level * 100 as col3 from dual connect by level < 11);

текущая запись даст мне суммы col1 до текущей записи партиционированно по col2
задача: получить эту выборку ограничив правый край

решение:
select col1, col2, col3, sum(case when col3 <= 400 then col1 else 0 end) over(partition by col2 order by col3 rows between unbounded preceding and current row) as s
from   (select level col1, ceil(level * 0.3) as col2, level * 100 as col3 from dual connect by level < 11);

наверняка есть решение лучше, не подскажете?
4 фев 11, 03:56    [10181317]     Ответить | Цитировать Сообщить модератору
 Re: тонкости over(...order by...rows between...)  [new]
Добрый Э - Эх
Guest
anonimus777
select col1, col2, col3, sum(col1) over(partition by col2 order by col3 rows between unbounded preceding and current row) as s
from   (select level col1, ceil(level * 0.3) as col2, level * 100 as col3 from dual connect by level < 11);

текущая запись даст мне суммы col1 до текущей записи партиционированно по col2
задача: получить эту выборку ограничив правый край

решение:
select col1, col2, col3, sum(case when col3 <= 400 then col1 else 0 end) over(partition by col2 order by col3 rows between unbounded preceding and current row) as s
from   (select level col1, ceil(level * 0.3) as col2, level * 100 as col3 from dual connect by level < 11);

наверняка есть решение лучше, не подскажете?

Ну если только выделенное выкинуть, чтобы избавиться от "масла масленого".
4 фев 11, 05:14    [10181336]     Ответить | Цитировать Сообщить модератору
 Re: тонкости over(...order by...rows between...)  [new]
Elic
Member

Откуда:
Сообщений: 29976
Добрый Э - Эх
anonimus777
over(partition by col2 order by col3 rows between unbounded preceding and current row)
Ну если только выделенное выкинуть, чтобы избавиться от "масла масленого".
"Масленое" - это range. А rows - только при уникальности (col2, col3).
4 фев 11, 08:50    [10181577]     Ответить | Цитировать Сообщить модератору
 Re: тонкости over(...order by...rows between...)  [new]
Добрый Э - Эх
Guest
Elic
"Масленое" - это range. А rows - только при уникальности (col2, col3).
Да, как-то выпал из головы этот немаловажный нюанс. :(
4 фев 11, 09:02    [10181618]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить