Como offer_date
es un número, y es de menor precisión que sus fechas reales, esto puede funcionar...
- Convierta su fecha real a una cadena de formato YYYYMM
- Convierte ese valor a un INT
- Compara el resultado con tu offer_date
SELECT
*
FROM
offers
WHERE
offer_date = (SELECT CAST(to_char(create_date, 'YYYYMM') AS INT) FROM customers where id = '12345678')
AND offer_rate > 0
Además, al hacer toda la manipulación en el create_date
solo realiza el procesamiento en un valor.
Además, si hubiera manipulado el offer_date
no podrá utilizar ningún índice en ese campo, por lo que forzará SCAN en lugar de SEEK.