Vous pouvez obtenir le premier du mois en calculant le dernier jour du mois précédent et en ajoutant un jour. C'est gênant, mais je pense que c'est mieux que de formater une date en tant que chaîne et de l'utiliser pour le calcul.
select
*
from
yourtable t
where
/* Greater or equal to the start of last month */
t.date >= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) and
/* Smaller or equal than one month ago */
t.date <= DATE_SUB(NOW(), INTERVAL 1 MONTH)