У меня есть таблица страховых полисов, подобная этой:
+-------------------------------------------------------------+
| id | cancellation_val | cancellation_interval | expire_date |
+-------------------------------------------------------------+
| 1 | 30 | day | 2019-06-09 |
| 2 | 2 | month | 2019-12-01 |
+-------------------------------------------------------------+
Мне нужно получить идентификаторы полисов, срок действия которых истекает на основе отмены, с сегодняшнего дня и в течение 4 месяцев, с расчетомпоследний день месяца, например псевдокод:
'today' <= LAST_DAY (expire_date - cancellation_val / interval) <'today + 4 months' <br>
Будучи не профессионалом, я думаю, что я должен использовать JOINs, но я не знаю, как, после нескольких дней попыток, единственное, чего я достиг, это:
SELECT LAST_DAY(
DATE_FORMAT(
STR_TO_DATE(
(SELECT CASE cancellation_interval
WHEN "day" THEN date_sub(expire_date, INTERVAL cancellation_val DAY)
WHEN "month" THEN date_sub(data_scadenzaexpire_date, INTERVAL cancellation_val MONTH)
END
AS newDate
FROM insurance WHERE id=2
), '%Y-%m-%d'
), '%Y-%m-%d'
)
)
Это работает, но мне не нужноПредложение «WHERE id = 2» (потому что мне нужно обработать ВСЕ строки таблицы), и если я его удалю, я получаю сообщение об ошибке «подзапрос возвращает более 1 строки».
Так, как я могу продолжить?И используя результат, чтобы остаться между «сегодня» И «сегодня + 4 месяца»?
Я думаю, что с помощью какого-то типа JOIN я мог бы сделать это проще, но я не знаю, как.
Спасибо всем