Das es mit Monaten nicht klappt ist ja klar... Du fragst ja nur den aktuellen Tag ab.
Zwei Vorschläge:
1) Nicht %e als Format sondern der Monatstag OHNE führende 0. Ich befürchte er verpeilt es mit der 0 und interpretiert es dann als String. Aber iegentlich ist das %e...
2) Als zusätzliche Bedingung würde ich einbauen, dass nur die Datensätze mit gleichem Jahr und Monat gelöscht werden. Also:
WHERE ... AND DATE_FORMAT(`time`, '%m%Y'
= DATE_FORMAT(NOW(), '%m%Y'
Anmerkung: Das klappt natürlich auch nicht bei dem letzten eines Monats. Hier könnteste du noch zusätzliche alle des gleichen jahres aber kleineren monaten löschen
Die Folge es klappt nicht mehr beim letzten eines Jahres => also auch alle kleneren Jahre löschen.
Komplettt anderer Ansatz:
Du wandelst einfach das datum aktaullerTagMinus1.akuellerMonat.Aktuelles Jahr 00:00:00 in einen Timestamp um und löschst alle kleineren ....