Devi distinguere due casi.
-
Quando
first < last
, le date sono dello stesso anno. Puoi quindi utilizzarebetween
per 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)