Här är en förenklad version som använder just date math:
SELECT LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 4) % 7);
Beroende på hur NOW() utvärderas (en eller två gånger per påstående), kanske du vill linda in detta i en funktion och lagra resultatet av NOW() till en variabel och använd sedan variabeln för LAST_DAY(var) anrop, för att undvika ett tävlingstillstånd där månaden rullar över mellan anrop till NOW() .