Después de investigar con especialistas en este tema, programadores de diversas áreas y maestros hemos dado con la respuesta al dilema y la dejamos plasmada en este post.
Solución:
puede reescribir eso presionando la subconsulta para que no esté unida externamente:
select Count(C.setid)
from mycustomer C
left outer join (select *
from mycustoption co
where co.effdt <= (select Max(COI.effdt)
from mycustoption COI
where COI.setid = co.setid
and COI.cust_id = co.cust_id
and COI.effdt <= sysdate)) co
on ( C.setid = CO.setid
and C.cust_id = CO.cust_id )
Bueno, aparentemente Oracle no admite el uso de una subconsulta dentro de la condición de combinación para una combinación externa. Así que necesitas deshacerte de la subconsulta.
La pregunta es, ¿por qué está ahí? Tiene "<=" condiciones en dos lugares, por lo que el predicado esencialmente dice "todos los registros cuya fecha de vigencia no sea posterior a la última fecha de vigencia que no sea posterior a ahora". Si eso es lo que realmente desea, puede simplificarlo a "todos los registros cuya fecha de vigencia no sea posterior a la actual", es decir:
ON
(C.SETID = CO.SETID
AND C.CUST_ID = CO.CUST_ID
AND CO.effdt <= SYSDATE
)
Voila, sin subconsulta.
Pero, ¿es eso realmente lo que quiere, o quiso decir que primero "<=" sea solo "=", es decir, encontrar el registro con la fecha de vigencia más reciente antes de ahora? Si eso es lo que realmente quieres, será más complejo reescribirlo.
Ten en cuenta dar visibilidad a este enunciado si te fue de ayuda.