Questo ti darà l'ultimo mese:
WHERE dateColumn BETWEEN SUBDATE(CURDATE(), INTERVAL 1 MONTH) AND NOW();
Questo dall'inizio del mese:
WHERE dateColumn BETWEEN STR_TO_DATE('2012-09-01', '%Y-%m-%d') AND NOW();
BETWEEN non è niente di speciale, è solo una scorciatoia per
dateColumn <= ... AND dateColumn >= ....
Hmm, suppongo che il confronto NOW() non sia effettivamente necessario, poiché tutti i record saranno prima di ora.
Quindi fai solo:
WHERE dateColumn >= STR_TO_DATE('2012-09-01', '%Y-%m-%d')
Inizio dinamico del mese corrente:
WHERE dateColumn >= CURDATE() - INTERVAL DAY(CURDATE())-1 DAY
Tutto ciò che fa è estrarre il giorno del mese dalla data corrente, quindi sottrarre da essa quel numero di giorni in meno.