Ecco una versione semplificata che utilizza solo la matematica della data:
SELECT LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 4) % 7);
A seconda di come NOW()
viene valutato (una o due volte per istruzione), potresti voler ancora racchiuderlo in una funzione e memorizzare il risultato di NOW()
in una variabile, quindi usa la variabile per LAST_DAY(var)
call, per evitare una race condition in cui il mese scorre tra le chiamate a NOW()
.