I have the following query :
SELECT S.IdCliente
,S.NOMBRE
,S.JLI_SDESLINEA
,S.JCA_SDESCATEGORIA
,SUM(S.MONTO) AS MONTO
,COUNT(*) AS QTY
,S.DIA
,T.IDTERRITORIO
,T.VENDEDOR
,T.SUPERVISOR
,V.IDCLIENTE
FROM Sabana S
LEFT JOIN CLIENTES C ON S.IDCLIENTE = C.IDCLIENTE
AND C.RC = 90
LEFT JOIN TERRITORIOS T ON C.TERRITORIO = T.IDTERRITORIO
LEFT JOIN (
SELECT X.IDCLIENTE
FROM SABANA X
WHERE X.MONTO > 0
AND X.PERIODO IN (
201708
,201707
,201706
)
GROUP BY X.IDCLIENTE
HAVING COUNT(DISTINCT X.PERIODO) = 3
) AS V ON V.IDCLIENTE = S.IDCLIENTE
WHERE S.MONTO > 0
--AND V.IDCLIENTE IS NOT NULL
AND S.PERIODO IN (
201708
,201707
,201706
)
GROUP BY S.IdCliente
,S.NOMBRE
,S.JLI_SDESLINEA
,S.JCA_SDESCATEGORIA
,S.DIA
,T.IDTERRITORIO
,T.VENDEDOR
,T.SUPERVISOR
,V.IDCLIENTE
When executing it takes approximately 2 minutes, which is fine, but I need to filter the result null
of the column V.IDCLIENTE
, then I tried to use INNER JOIN
, and delayed 30 minutes, with IS NOT NULL
also delayed 30 minutes approx.
Any ideas to make time efficient?
This is the execution plan of the query above:
And this is the real execution plan of the query using INNER JOIN
instead of LEFT JOIN
: