brauchst du die Monate von 0-11, wegen month()-1?
FLOOR habe ich noch nie verwendet, aber probier mal von Ansatz her folgendes, müsste schneller sein
CASE WHEN MOD(MINUTE( `datetime`),5)>0 THEN 5-MOD(MINUTE( `datetime`),5) ELSE 0 END
das musst aber im select und im group by haben, weil mit MINUTE(datetime) kann das nicht gehen, ist quasi ein Aggregationsweiderspruch.
PHP kann eigentlich nicht schneller sein, sofern die Abfrage passt. Ich mache immer so viel als möglich in der DB, alles andere hat oft zuviel overhead. Wobei in bestimmten Fällen kann es sein, wenn du z.B. nur eine Teilmenge aus der DB benötigst oder u.U. mit Curser herumfuhrwerken musst, dann kann es schon Sinn machen. Bei dir kommts drauf an wieviel Daten du mit mit PHP weiterverarbeiten musst.