Devi distinguere due casi.
-
Quando
first < last, le date sono dello stesso anno. Puoi quindi utilizzarebetweenper abbinare le date. -
Quando
first > last, significalastè nel prossimo anno. In questo caso, le date che corrispondono sonodate >= first OR date <= last.
Quindi la tua clausola WHERE dovrebbe essere:
WHERE IF(first < last, @date BETWEEN first AND last,
@date >= first OR date <= last)