Voici une version simplifiée utilisant uniquement les calculs de date :
SELECT LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 4) % 7);
Selon comment NOW() est évalué (une ou deux fois par instruction), vous voudrez peut-être toujours l'envelopper dans une fonction et stocker le résultat de NOW() dans une variable, puis utilisez la variable pour le LAST_DAY(var) call, pour éviter une condition de concurrence où le mois se renouvelle entre les appels à NOW() .