Да очень просто:
Выборка за текущий месяц:
select id from tab where date_format(real_time, '%Y%m') = date_format(now(), '%Y%m');
или вот так:
select id from tab where month(real_time) = month(now()) and year(real_time) = year(now());
За прошлый месяц:
select id from tab where date_format(real_time, '%Y%m') = date_format(date_add(now(), interval -1 month), '%Y%m');
За текущую неделю:
select id from tab where year(real_time) = year(now()) and week(real_time, 1) = week(now(), 1);
В функции week(date, N) N - это номер дня, с которого начинается неделя: 0 - с воскресенья, 1 - с понедельника
Лучше сравнивать колонку с выражением, а не преобразовывать колонку и потом сравнивать. Предлагаю так, за текущий месяц:
select id
from tab
where real_time > LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
AND real_time < DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY)
за предыдущий
select id
from tab
where real_time > LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 2 MONTH))
AND real_time < DATE_ADD(LAST_DAY(CURDATE() - INTERVAL 1 MONTH), INTERVAL 1 DAY)
за текущую неделю
select id
from tab
where real_time > DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) -1) DAY)
AND real_time < DATE_ADD(CURDATE(), INTERVAL (9 - DAYOFWEEK(CURDATE())) DAY)