Coś mi się zdaje, że nie o to koledze chodziło ;)
Tak czy inaczej, nie po ludzie wymyślili typ DATE, żeby takie rzeczy ręcznie robić. Może by kolumny month i year upchać w jedną? (Prawdopodobnie same korzyści z tego wynikną w dłuższym czasie).
A jak już się będziesz upierał przy swoim to zapytanie będzie bardziej skomplikowane, bo co jeśli podasz np zakres z dwóch lat? Dla twojego wycinka danych i tak powinieneś użyć warunku OR lub AND w zależności od tego czy rok startowy będzie taki sam jak końcowy,
np. forma:
SELECT *
FROM Table_1
WHERE (m >= 11 and r >= 2011)
or (m <= 2 and r <= 2012)
Pobierze rekordy jak chcesz, ale nie zadziała już dla 11-2011 i 12-2012 bo zwróci również 10-2011 (pasuje do drugiego warunku), więc musisz stosować IF'a.
Przypadek, kiedy rok_startowy będzie się różnił o więcej niż 1 w porównaniu do rok_końca będziesz jeszcze bardziej rozbudowany.
Prawie dobrze, ale co z 11/2013?
Lepiej - dla 11/2011..02/2012:
SELECT *
FROM Table_1
WHERE (m >= 11 AND r = 2011)
OR (m <= 2 AND r = 2012)
dla 11/2011..02/2013 (z całym rokiem pośrodku, bardziej uniwersalne):
SELECT *
FROM Table_1
WHERE (m >= 11 AND r = 2011)
OR (r > 2011 and r < 2013)
OR (m <= 2 AND r = 2013)
czyli ogólnie
SELECT *
FROM Table_1
WHERE (m >= {month-1} AND r = {year-1})
OR (r > {year-1} and r < {year-2})
OR (m <= {month-2} AND r = {year-2})