Es necesario distinguir dos casos.
-
Cuando
first < last
, las fechas son del mismo año. A continuación, puede utilizarbetween
para hacer coincidir las fechas. -
Cuando
first > last
, significalast
es en el proximo año. En este caso, las fechas que coinciden sondate >= first OR date <= last
.
Entonces su cláusula WHERE debería ser:
WHERE IF(first < last, @date BETWEEN first AND last,
@date >= first OR date <= last)