tu estructura no me queda clara... pero el uso de tablas derivadas (creo que así le llamaron algunos autores... yo prefiero llamarles inline views) te dará una idea que debiera funcionar:
Código SQL
[-]
select m1.producto, m1.existnecia, q1.ultima_fecha
from movimiento m1
inner join (
select m2.producto, max(m2.fecha) ultima_fecha
from movimiento m2
group by m2.producto
) q1
on m1.producto = q1.producto
and m1.fecha = q1.ultima_fecha
order by q1.ultima_fecha desc;
Funcionará en firebird 2 o superior. En versiones anteriores, deberás primero crear una vista con la tabla anidada (q1) y reestructurar el query.
Hasta luego.
