Cela vous donnera le mois dernier :
WHERE dateColumn BETWEEN SUBDATE(CURDATE(), INTERVAL 1 MONTH) AND NOW();
Ceci depuis le début du mois :
WHERE dateColumn BETWEEN STR_TO_DATE('2012-09-01', '%Y-%m-%d') AND NOW();
L'ENTRE n'a rien de spécial, c'est juste un raccourci pour
dateColumn <= ... AND dateColumn >= ....
Hmm, je suppose que la comparaison NOW() n'est pas vraiment nécessaire, puisque tous les enregistrements seront avant maintenant.
Alors faites simplement :
WHERE dateColumn >= STR_TO_DATE('2012-09-01', '%Y-%m-%d')
Début dynamique du mois en cours :
WHERE dateColumn >= CURDATE() - INTERVAL DAY(CURDATE())-1 DAY
Tout cela ne fait qu'extraire le jour du mois de la date actuelle, puis en soustraire ce nombre de jours moins un.