Предполагается, что это вопрос Oracle, а не MySQL:
Я думаю, первое, что вам нужно сделать, это рассчитать, когда наступит срок оплаты. Я думаю, что простое заявление случая может справиться с этим для вас:
case when period = 'day' then start_date + numtodsinterval(interval,period)
when period = 'week' then start_date + numtodsinterval(interval*7,'day')
when period = 'month' then add_months(start_date,interval)
when period = 'year' then add_months(start_date,interval*12)
end due_date
Затем, используя это новое поле due_date, вы можете проверить, попадает ли срок оплаты between
желаемый диапазон дат.
select *
from(
select id,
start_date,
interval,
period,
case when period = 'day' then start_date + numtodsinterval(interval,period)
when period = 'week' then start_date + numtodsinterval(interval*7,'day')
when period = 'month' then add_months(start_date,interval)
when period = 'year' then add_months(start_date,interval*12)
else null end due_date
from data)
where due_date between date '2018-02-25' and date '2018-03-12'
При проверке вышеупомянутого запроса в период с 2/25/18 по 3/12/18 с использованием ваших данных получается следующий вывод:
+----+-------------+----------+--------+-------------+
| id | start_date | interval | period | due_date |
+----+-------------+----------+--------+-------------+
| 2 | 05-FEB-2018 | 3 | week | 26-FEB-2018 |
| 5 | 25-FEB-2018 | 2 | week | 11-MAR-2018 |
+----+-------------+----------+--------+-------------+