powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Посоветуйте статьи с доходчивым объяснением фичи over()
15 сообщений из 15, страница 1 из 1
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161381
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне встречались статьи где доходчиво и на примерах объяснялись некоторые расширения SQL в Оракл. Может кто посоветует такую по фичи over(). А то из доки не совсем понятно.
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161478
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пока знаю только статью Владимира Пржиялковского Аналитические функции в Oracle
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161502
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по вашим примерам запросов, вы владеете этой фичей просто мастерски. Особенно впечатлило время исполнения запроса с нарастающим итогов в недавнем топике - вместо 20 сек. - ~0,5.
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161518
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отковенно говоря, нет. К примеру, до сих пор не могу "с лета" написать фразы наподобе ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.

Возвращаясь к нарастающему итогу: следующий запрос выполняется тоже неплохо и, что немаловажно, должен работать на Oracle 8i Standard Edition:

Код: plaintext
1.
2.
3.
4.
select t.test_id
     , t.value
     , (select sum(value) from test t2 where t2.test_id <= t.test_id) growing
from test t
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161618
are
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
are
Гость
небольшая статья про analytic functions...

Analytic Functions in Oracle 8i and 9i
http://www.akadia.com/services/ora_analytic_functions.html
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161653
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Denis Popov

Возвращаясь к нарастающему итогу: следующий запрос выполняется тоже неплохо

Проверила этот запрос на таблице

Код: plaintext
1.
2.
3.
create table inncome(
inc_date date,
inc_value number ( 9 , 2 )
);


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select i1.inc_date,
       i1.inc_value,
       (select sum(i2.inc_value) from inncome i2 where i2.inc_date <= i1.inc_date) itog
from inncome i1
order by i1.inc_date; 

  1000  rows selected.

Elapsed:  00 : 00 : 03 . 03 


с over

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select inc_date,
       inc_value,
       sum(inc_value) over (order by inc_date) itog
from inncome;

 1000  rows selected.

Elapsed:  00 : 00 : 00 . 04 


Разница все таки огромная!

PS
В таблице даты могут повторяться (может пыть несколько поступлений в день), как сделать так, чтобы в результатах каждая дата присутсвовала только 1 раз. Понятно что из запросов inc_value надо исключить, а как и где group by сказать в этом случае.
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161690
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А поступления за один день надо складывать, выводить какое-то из них или ранжировать в каком-нибудь порядке?
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161706
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Складывать, т.е. своего рода отчет по сотоянию на окончание дня. Т.е. сначала sum() group by date а потом уже нарастающий итог.

Можно вложить эти запросы во что то типа

select date, max(summa) from подзапрос group by date

это пока единственное что мне пришло в голову.
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161735
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно сперва просуммировать, а потом дать нарастающий итог

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select inc_value 
     , sum(inc_value) over (order by inc_date) itog
from (select inc_date
            , sum(inc_value) inc_value 
      from inncome
      group by inc_date     
      )
/


Еще обрати внимание в статье Пржиялковского на абзац "Формирование интервалов агрегирования "по строкам" и "по значениям", что в твоем случае означает использование выражения RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Примерно так вроде?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select distinct
       inc_date
     , itog
from (select inc_date
           , sum(inc_value) over (
               order by inc_date
               range between unbounded preceding and current row
             ) itog
      from inncome
     )
/    


Может еще как-нибудь можно.
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161783
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, у меня данные сгенеренные DataFactory поэтому даты различны по времени, а я думаю почему не группирует:-)

Как обрезать временную компоненту для inc_date сделав везде время 00:00:00?

update inncome set inc_date = ????;

Хотя более правильно было бы время оставить, время дня может тоже понадобиться, а в запросах использовать что то типа

to_char(inc_date, 'DD.MM.YYYY')

попробовала - ругается в group by. Как быть?
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161789
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хех, trunc(inc_date) или, что то же самое, trunc(inc_date, 'dd').
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161804
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно почему с trunc() работает а с to_char() нет? Может потому что to_char() тип данных меняет...

Проверила, первый запрос отработал за 00:00:00.03, а второй за
00:00:07.02. Подозреваю в этом виноват distinct.

Спасибо за помощь!
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161833
Chira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для формата date: 31.12.2001 < 01.01.2002
для char наоборот: 31.12.2001 > 01.01.2002

одинаковые результаты можно получить если использовать формат для char YYYY.MM.DD
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161906
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про это

для char наоборот: 31.12.2001 > 01.01.2002

я и не подумала, действительно. Но на to_char() он на синтаксис ругался...
...
Рейтинг: 0 / 0
Посоветуйте статьи с доходчивым объяснением фичи over()
    #32161908
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Odna iz mnogix osobennostei over() - eto Read/Write operazii po BULK mechanizm..
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Посоветуйте статьи с доходчивым объяснением фичи over()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]