Aqui está uma versão simplificada usando apenas matemática de data:
SELECT LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 4) % 7);
Dependendo de como
NOW()
é avaliado (uma ou duas vezes por instrução), você pode querer ainda envolver isso em uma função e armazenar o resultado de NOW()
em uma variável e, em seguida, use a variável para o LAST_DAY(var)
call, para evitar uma condição de corrida em que o mês rola entre as chamadas para NOW()
.