Ну, в SQLite я бы попытался так:
"create temp table flat as
|select
| Склад,
| Материал,
| 0 Месяц,
| 0 Приход,
| 0 Расход,
| Количество КонОст
|from Остатки
|union all
|select
| Склад,
| Материал,
| Месяц,
| КоличествоПриход Приход,
| КоличествоРасход Расход,
| 0 КонОст
|from Обороты"
"create index tmp_flat on flat(Склад, Материал, Месяц)"
"update flat set КонОст = Приход - Расход +
| (select КонОст from flat f
| where f.Склад = Склад and f.Материал = Материал and f.Месяц < Месяц
| order by f.Склад desc, f.Материал desc, f.Месяц desc limit 1)
|where Месяц <> 0"
Однако чуствую, что отнюдь не самым оптимальным это будет.
Это как раз такая задача, которая требует навигационных способов доступа, и запросом решается плохо.
Дмитро не зря ведь виртуальную таблицу остатков и оборотов реализовывал именно через врем-таблицу и процедурку на сервере.
Ну а общий принцип таков - идешь по таблице оборотов в порядке Склад, Материал.
Если Склад<>ПрошСклад или Материал <> ПрошМатериал, ищешь в таблице остатков остаток для Склада/Материала, запоминаешь его.
Вычисляешь коностаток как запомненный остаток + приход - расход.
Записываешь его в таблицу как коностаток, и запоминаешь его.
А если база дбф, то затрат на выгрузку ТЗ в базу можно избежать, если таблицы остатков и оборотов вычисляются запросом из таблиц базы. просто вместо select пишешь create temp table ttt as select