Sie müssen zwei Fälle unterscheiden.
-
Wenn
first < last
, die Daten sind im selben Jahr. Sie können dannbetween
verwenden Daten entsprechen. -
Wann
first > last
, es bedeutetlast
ist 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)