Hola,
 
Posiblemente lo puedas realizar de la siguiente forma...  
Código:
 -- 1)
select distinct a.codigo,
(
  select top 1 b.precio
  from precios b
  where a.codigo = b.codigo and a.oferta = b.oferta
  order by b.fecha desc
) precio
from precios a
where a.oferta = 1
go
  
Código:
 -- 2)
select distinct a.codigo, a.precio
from precios a
inner join
(
  select codigo, oferta, max(fecha) as ultima_fecha
  from precios
  group by codigo, oferta
) b on a.codigo = b.codigo and a.oferta = b.oferta
where a.fecha = b.ultima_fecha and a.oferta = 1
go
  Las dos instrucciones deberían funcionar para hacer lo mismo.
No estoy seguro cual sería la mejor, tampoco sé si existe una forma más adecuada. 
Saludos,  
Este texto está de colores, :) .