>SELECT MEMBER.*,MAX(LOGIN.CREATION) AS LOGINCREATION FROM LOGIN; > INNER JOIN MEMBER ON LOGIN.NOMEMBER=MEMBER.NUMERO; > WHERE MEMBER.NUMERO>=lnNumberStart AND MEMBER.NUMERO<=lnNumberEnd; > AND MEMBER.MAILING=1; > HAVING LOGINCREATION< DATE()-120; > GROUP BY 1 INTO CURSOR TEMP >I don't know about how much more you can optimize as long as you have indexes on Login.NoMember, Login.Creation, Member.Numero and Member.Mailing. I would use BETWEEN() function in the WHERE clause --