Il faut distinguer deux cas.
-
Quand
first < last
, les dates sont dans la même année. Vous pouvez ensuite utiliserbetween
pour faire correspondre les dates. -
Quand
first > last
, cela signifielast
c'est l'année prochaine. Dans ce cas, les dates qui correspondent sontdate >= first OR date <= last
.
Donc votre clause WHERE devrait être :
WHERE IF(first < last, @date BETWEEN first AND last,
@date >= first OR date <= last)