Que tal elwolos, entendi
Veamos si cualquiera de estas dos consultas te ayuda:
Cita: SELECT codigo, estado, fecha
from recorrido r1
where r1.estado = '3' AND
fecha=(select max(fecha) from recorrido
where estado=r1.estado and codigo=r1.codigo) and
(select count(*) from recorrido r2
where r2.codigo=r1.codigo and r2.estado!=r1.estado)=0
order by codigo;
o esta
Cita: SELECT codigo, estado, fecha
from recorrido r1
where r1.estado = '3' AND
fecha=(select max(fecha) from recorrido
where estado=r1.estado and codigo=r1.codigo) and not exists
(select * from recorrido r2
where r2.codigo=r1.codigo and r2.estado!=r1.estado)
order by codigo;
Cualquiera de las dos te da el mismo resultado. Solo que estoy haciendo la consulta si es que el codigo tambien ha tenido otro estado (asi sea 5 o no).
Si quieres que solo sea 5, cambiale el where en la segunda sub-consulta
Cita: SELECT codigo, estado, fecha
from recorrido r1
where r1.estado = '3' AND
fecha=(select max(fecha) from recorrido
where estado=r1.estado and codigo=r1.codigo) and
(select count(*) from recorrido r2
where r2.codigo=r1.codigo and r2.estado='5')=0
order by codigo;
Igual en el segundo select.
Espero que sea lo que deseas, saludos