¡Ugh!
Ese no es exactamente un problema de BBDD, aunque la base de datos debe ser diseñada de modo que sea capaz d aportar los datos para resolverlo...
Tu problema tiene más que ver con contabilidad y balances en un entorno variable. las formas de hacer esos cálculos en realidad las deberías ver con alguien que entienda mejor cómo se desarrollan ese tipo de analisis contable.
Desde ya, es un problema interesante, y seguro que está resuelto hace mucho. Lo que yo vagamente recuerdo de la escuela secundaria, es que eso se relacionaba con el manejo de PEPS y PEUS (primero entrado, primero salido, y primero entrado, último salidao), aunque francamente tendría que buscar esos viejso apuntes para saber cómo era que se calculaban los saldos de ganancia en ese caso.
A nivelde Base de Datos, lo que ese tipo de situaciones requiere es que toda compra y venta tenga lo que se denomina "trazabilidad temporal", es decir, toda accion de entrada y salida de mercadería, valores monetairos y transacciones debe permitir realizar un seguimiento paaso a paso de todo el proceso comercial. Si la base no puede hcer eso, no podrás intentar ese tipo de reportes.-