Изявленията за изпускане на таблица предизвикват имплицитно ангажиране, което не е разрешено в mysql функция. drop temporary table все пак не предизвиква ангажимента. ако не се притеснявате от съществуването на обикновени (не временни) таблици с имена months_between_dates или filter_months, трябва да можете да промените
DROP TABLE IF EXISTS months_between_dates;
DROP TABLE IF EXISTS filter_months;
до
DROP TEMPORARY TABLE IF EXISTS months_between_dates;
DROP TEMPORARY TABLE IF EXISTS filter_months;