Примерно так:
SELECT *
FROM dt_tb
WHERE (dt >= '2010-10-01') AND (dt < '2011-05-01')
(все данные за период, начинающийся 1 октября и заканчивающийся ДО 1 мая, то есть 30 апреля).
Использование DATE_SUB () и CURDATE () хорошо, если вам нужно скользящее окно, но если вам требуются фиксированные начальные и конечные моменты времени, как семестр, лучше использовать фактические даты.
Кроме того, ваш метод выберетлюбые данные из фьючерсных семестров, которые еще не произошли, поскольку ваше предложение WHERE в основном гласит: «дайте мне все в базе данных, которая новее, чем 6 месяцев назад».Если вы храните семестры следующих двух лет, вы их тоже получите.Указывая даты начала / окончания, вы получаете только тот семестр, который вам действительно нужен.