Трябва да различите два случая.
-
Когато
first < last
, датите са от една и съща година. След това можете да използватеbetween
за съвпадение на датите. -
Когато
first > last
, това означаваlast
е през следващата година. В този случай датите, които съвпадат саdate >= first OR date <= last
.
Така че вашата клауза WHERE трябва да бъде:
WHERE IF(first < last, @date BETWEEN first AND last,
@date >= first OR date <= last)