This query takes ~5x longer than it should due to the WHERE IN() statement at the end. Is there a way to check IN() the resultset of the outer query?
SELECT SC.ROW_ID C1_CASE_ID,
SC2.ROW_ID C2_NEW_CASE_ID,
SC2.CASE_NUM C3_NEW_CASE_NUM,
MC.ROW_ID C4_MSTR_CASE_ID,
MC2.ROW_ID C5_NEW_MSTR_CASE_ID,
MC2.CASE_NUM C6_NEW_MSTR_CASE_NUM
FROM siebel.ODS_S_CONTACT MCON2,
siebel.ODS_S_CONTACT MCON,
siebel.ODS_S_CASE SC,
siebel.ODS_S_CASE MC,
siebel.ODS_S_CASE_BNFTPLAN CBP,
siebel.ODS_S_CASE MC2,
siebel.ODS_S_CASE SC2
WHERE (SC.STATUS_CD = 'Withdrawn')
AND (CBP.STATUS_CD IN ('Active', 'Approved','Inactive')
AND EXISTS (
SELECT 1
FROM (SELECT cbp2.row_id cbp2_row_id,
cbp2.case_id cbp2_case_id,
DENSE_RANK() OVER (PARTITION BY cbp2.case_id ORDER BY CASE WHEN cbp2.status_cd = 'Active' THEN 1
WHEN cbp2.status_cd = 'Approved' THEN 2
WHEN cbp2.status_cd = 'Inactive' THEN 3
ELSE 4
END,cbp2.created DESC
) cbp2_order
FROM siebel.ods_s_case_bnftplan cbp2
--where cbp2.case_id = CBP.CASE_ID
) sq
WHERE cbp2_order = 1
AND CBP.CASE_ID = cbp2_case_id
AND CBP.ROW_ID = cbp2_row_id
)
)
WHERE (SC.MSTR_CASE_ID=MC.ROW_ID)
AND (MC.APPLICANT_ID=MCON.ROW_ID)
AND (MCON.SOC_SECURITY_NUM=MCON2.SOC_SECURITY_NUM AND MCON.ROW_ID <> MCON2.ROW_ID)
AND (MCON2.ROW_ID=MC2.APPLICANT_ID)
AND (MC2.ROW_ID=SC2.MSTR_CASE_ID AND SC2.TYPE_CD = SC.TYPE_CD AND SC2.STATUS_CD = 'Active')
AND (SC.ROW_ID=CBP.CASE_ID)
AND SC2.CREATED IN (
-- default: 46 rows ~30seconds
SELECT MAX(SCSUB.CREATED)
FROM siebel.ODS_S_CASE SC2SUB
INNER JOIN siebel.ODS_S_CASE MC2SUB ON MC2SUB.ROW_ID = SC2SUB.MSTR_CASE_ID
INNER JOIN siebel.ODS_S_CONTACT MCON2SUB ON MC2SUB.APPLICANT_ID = MCON2SUB.ROW_ID
INNER JOIN siebel.ODS_S_CONTACT MCONSUB ON MCON2SUB.SOC_SECURITY_NUM = MCONSUB.SOC_SECURITY_NUM
INNER JOIN siebel.ODS_S_CASE MCSUB ON MCONSUB.ROW_ID = MCSUB.APPLICANT_ID
INNER JOIN siebel.ODS_S_CASE SCSUB ON MCSUB.ROW_ID = SCSUB.MSTR_CASE_ID
INNER JOIN siebel.ODS_S_CASE_BNFTPLAN CBPSUB ON CBPSUB.CASE_ID = SCSUB.ROW_ID
WHERE SC2SUB.ROW_ID = SC2.ROW_ID
AND CBPSUB.STATUS_CD IN ('Active', 'Approved')
AND SC2SUB.TYPE_CD = SCSUB.TYPE_CD
AND SCSUB.STATUS_CD = 'Active'
)