No tengo como probarlo, pero se podra hacer algo asi?
Código SQL
[-]
Select lp.*
from ListaPrecios lp
where lp.FIVigencia= (select max(lp2.FIVigencia) from ListaPrecios lp2
where lp2.Cod_Producto=lp.Cod_Producto
and lp2.Cod_TipoPrecio=lp.Cod_TipoPrecio
and lp2.Cod_Moneda=lp.Cod_Moneda)
o mas sencillo, en vez de tener FIVigencia reemplazalo por
FFVigencia (fecha fin vigencia)
el precio actual lo pones con FFVigencia en NULL, al cambiar precio,
insertas un registro con FFVigencia en NULL y le pones
FFVigencia con la fecha actual al registro que cambio
Entonces en el select solo haces
Código SQL
[-]
Select lp.*
from ListaPrecios lp
where lp.FFVigencia is NULL
al cabiar precio, dentro de una transaccion haces
update ListaPrecios set FFVigencia = CURRENTDATE
where Cod_Producto=......... and .....
insert into ListaPrecios ... con FFVigencia =NULL
Espero que te sirva la idea