powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA9 Опримизация кода из FAQ
4 сообщений из 4, страница 1 из 1
ASA9 Опримизация кода из FAQ
    #33180001
Юрий Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYBASE ASA9

Привожу код процедуры для ABC рассчёта. Код рассчёта нарастаюшим итогом
через временную таблицу подсмотрел в FAQ. Групировка продаж по коду запчасти за год выполняется за 0,01 сек, а вот рассчёт нарастающим итогом во временной таблице ( update всего 2500 записей ) занимает 12 сек.
Может можно его пооптимальнее сделать?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
ALTER PROCEDURE "DBA"."ABC"( start_date DATE  )

BEGIN
	
declare total double;

// Временная таблица для рассчёта ABC 
create table #ABC(number integer, sum double,procent double, procrost double, gr varchar( 10 ));

//  Выборка данных из истории продаж table-salelist, групировка по коду товара , сортировка по сумме продажи
insert into #ABC(number, sum)  select number, sum(price*partkol) as s // number-код товара ,partkol -количество ,price - цена
    from salelist where saleno>(select first saleno from sales where saledate>start_date order by saleno)/*начальный период рассчета*/ 
    and  state= 0  group by number order by s  desc;

// общая сумма продажи
set total= (select  sum(sum) from #ABC) ; 

// рассчёт % доли каждой позиции в общей сумме продажи 
update #ABC set procent=sum/total* 100 . 0 ; 

// рассчёт доли нарастающим итогом
update #ABC a set procrost = (select sum (b.procent) from #ABC b where b.procent>=a.procent);

// Группы ABC по условию A=70% оборота, В=20% оборота и С=10% оставшихся.
update #ABC set gr='A' where procrost < 70 . 0 ;
update #ABC set gr='B' where procrost >= 70 . 0  and procrost < 90 . 0 ;
update #ABC set gr='C' where procrost >= 90 . 0 ;

// Возврат диференцированого по методу ABC списка
select number,gr from #ABC
END
...
Рейтинг: 0 / 0
ASA9 Опримизация кода из FAQ
    #33180017
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для ASA9 все это по идее можно сделать одним запросом, с использованием OLAP Window функций. Прочитать про них можно в BOL.
...
Рейтинг: 0 / 0
ASA9 Опримизация кода из FAQ
    #33180192
Юрий Андрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS ! - вот огромное спасибо Вам. OLAP - вещь. Тот же расчет но с
использованием PERCENT_RANK () выполняется за 0.25 сек для списка из 75000 продаж!
...
Рейтинг: 0 / 0
ASA9 Опримизация кода из FAQ
    #33216793
Марсель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет
Интересно посмотреть на выборку по ABC с использованием PERCENT_RANK()
дай примерчик пожалуйста ;)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA9 Опримизация кода из FAQ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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