Я хочу найти способ суммировать все приращения в значении столбца.
Мы предоставляем услуги доставки нашим клиентам.Клиент может заплатить, как он идет, но если он платит аванс, он получает более выгодную сделку.Есть таблица с балансом клиента по времени.Поэтому я хочу суммировать все приращения к балансу.Я не могу изменить способ записи платежа.
Я уже закодировал хранимую процедуру, которая работает, но довольно медленно, поэтому я ищу альтернативы.Я думаю, что, может быть, оператор SQL, который может выполнить эту задачу, может превзойти мою хранимую процедуру с циклами.
Моя хранимая процедура делает выбор клиента в заданном диапазоне дат и вставляет результат ввременная таблица X. После этого она начинает извлекать строки из таблицы X, сравнивая значение баланса в этой строке с предыдущей строкой, и обнаруживает, есть ли приращение.Если приращения нет, появляется другая строка и выполняется та же процедура, при наличии приращения вычисляется разница между этой строкой и предыдущей, а результат вставляется в другую временную таблицу Y.
Когдастрок не осталось, хранимая процедура выполняет SUM во временной таблице Y, и, таким образом, вы можете узнать, на сколько клиент «пополнил» свой баланс.
Это пример таблицы X,и ожидаемый результат:
DATE BALANCE
---- -------
2019-02-01 200
2019-02-02 195 //from 200 to 195 there is a decrement, so it doesn't matter
2019-02-03 180
2019-02-04 150
2019-02-05 175 //there is an increment from 150 to 175, it's 25 that must be inserted in the temp table
2019-02-06 140
2019-02-07 180 //there is another increment, from 140 to 180, it's 40
Таким образом, результирующая временная таблица Y должна выглядеть примерно так:
REFILL
------
25
40
Ожидаемый результат равен 65. Моя хранимая процедура возвращает это значение, но какЯ сказал, что это довольно медленно (около 22 секунд для обработки 3900 строк, что эквивалентно 3 дням, приблизительно), я думаю, что это из-за циклов.Я хотел бы изучить другие альтернативы.Поскольку некоторые детали, которые я здесь не упоминаю, для одного клиента, я могу иметь 1300 строк в день (пример приводится в днях, но у меня есть строки по минутам).Мои таблицы проиндексированы, я думаю, правильно.Я не могу опубликовать свою хранимую процедуру, но она работает как описано (я знаю, что «Дьявол кроется в деталях»).Так что любое предложение будет оценено.