ник: alex-freeman
kot_k_k, к сожалению нет. (( Тут ни Sum, ни Dsum не поможет, но ни в этом дело. Запрос с расчетом нарастающего итога по группам я сделал, но он очень низкопроизводительный, и я хочу его оптимизировать.
Могу более детально описать ситуацию на примере.
Например исходный массив, который я предварительно собираю запросом:
№ Компания дата Сумма
1 К1 01.01.2010 100
2 К1 02.01.2010 0
3 К1 03.01.2010 -20
4 К2 01.01.2010 0
5 К2 02.01.2010 0
6 К2 03.01.2010 50
7 К3 01.01.2010 30
8 К3 02.01.2010 -20
9 К3 03.01.2010 5
N ...... ....... ....
Нужно было получить нар.итог и записать результат в таблицу (в след виде):
№ Компания дата Нар.итог
1 К1 01.01.2010 100
2 К1 02.01.2010 100
3 К1 03.01.2010 80
4 К2 01.01.2010 0
5 К2 02.01.2010 0
6 К2 03.01.2010 50
7 К3 01.01.2010 30
8 К3 02.01.2010 10
9 К3 03.01.2010 15
N .... ... ....
Если через Sum, тогда на 01.01.2010 сумма будет 130 для к1,к2 и к3, на 02.01.2010 - 110 и т.д.. Т.е. сложит все без группировки.
Я нар.итог посчитал как:
Нар.итог: (SELECT Sum(T.Сумма) FROM Таблица1 As T WHERE (Таблица1.Компания=T.[Компания]) And (T.[Дата]<=Таблица.[Дата]) )
Это рекурсия и для выполнения запроса производится N^2 итераций. Записей сейчас ок.10тыс., что дает 100млн. итераций, каждая из которых связана с кучей расчетов (не только по этому полю). Мой 4ядерный комп на этот запрос тратит более 2-х часов.
Поэтому я хочу оптимизировать процесс - и в процедуре считать нар.итог отдельно для к1, потом к2 и к3 (уже без рекурсии, через Sum). И последовательно записывать результат в итоговую таблицу.
Вот мой вопрос - как мне написать такую процедуру?
Думаю что ничего сложного, просто в ВБА ничего не секу ;)
Если будут другие идеи по реализации задачи буду рад!