Sie müssen zwei Fälle unterscheiden.
-
Wenn
first < last, die Daten sind im selben Jahr. Sie können dannbetweenverwenden Daten entsprechen. -
Wann
first > last, es bedeutetlastist im nächsten Jahr. In diesem Fall sind die übereinstimmenden Datendate >= first OR date <= last.
Ihre WHERE-Klausel sollte also lauten:
WHERE IF(first < last, @date BETWEEN first AND last,
@date >= first OR date <= last)