Трябва да различите два случая.
-
Когато
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)