To da ci ostatni miesiąc:
WHERE dateColumn BETWEEN SUBDATE(CURDATE(), INTERVAL 1 MONTH) AND NOW();
To od początku miesiąca:
WHERE dateColumn BETWEEN STR_TO_DATE('2012-09-01', '%Y-%m-%d') AND NOW();
BETWEEN to nic specjalnego, to tylko skrót do
dateColumn <= ... AND dateColumn >= ....
Hmm, wydaje mi się, że porównanie NOW() nie jest tak naprawdę potrzebne, ponieważ wszystkie rekordy będą wcześniej.
Więc po prostu zrób:
WHERE dateColumn >= STR_TO_DATE('2012-09-01', '%Y-%m-%d')
Dynamiczny początek bieżącego miesiąca:
WHERE dateColumn >= CURDATE() - INTERVAL DAY(CURDATE())-1 DAY
Wszystko to polega na wyodrębnieniu dnia miesiąca od bieżącej daty, a następnie odjęciu od niego liczby dni mniej o jeden.