Tengo una consulta que se medio lenta ya que alrededor de 18 millones de registros ..
SELECT P.COD_PERSONA,P.APE_PATERNO, P.APE_MATERNO, P.NOMBRES, P.SEXO ,
CASE WHEN MONTH(FEC_NACIMIENTO) > MONTH(GETDATE()) THEN (YEAR(GETDATE()) - YEAR(FEC_NACIMIENTO) - 1)
WHEN MONTH(GETDATE()) = MONTH(FEC_NACIMIENTO) AND DAY(FEC_NACIMIENTO) > DAY(GETDATE()) THEN YEAR(GETDATE()) - YEAR(FEC_NACIMIENTO) - 1
ELSE YEAR(GETDATE()) - YEAR(FEC_NACIMIENTO) END AS EDAD,
(SELECT (SELECT REGION FROM UBIGEO WHERE COD_UBIGEO=D.UBIGEO_NAC) FROM DNI_PERSONA D WHERE D.COD_PERSONA=P.COD_PERSONA) AS LUGAR_NAC,
(SELECT NRO_DOCUMENTO FROM DNI_PERSONA D WHERE D.COD_PERSONA=P.COD_PERSONA) AS DNI,
(SELECT NRO_RUC FROM RUC_PERSONA R WHERE R.COD_PERSONA=P.COD_PERSONA) AS RUC,
(SELECT AUTOGENERADO FROM ESSALUD_PERSONA E WHERE E.COD_PERSONA=P.COD_PERSONA) AS ESSALUD
FROM TB_PERSONA P WHERE DAY(P.FEC_NACIMIENTO)='12' and month(P.FEC_NACIMIENTO)='02'
en este caso me piden la consulta por fecha de cumpleaños
y otro muy parecido (solo cambiando la condicional WHERE) con rango de edades
y no lo puedo hacer ya que este campo es calculado y esta con un alias
me podrían dar alguna solución o recomendación ante este problema
gracias.