У меня есть одна таблица с именем checks
.Это держит несколько периодов.Для этого чеки имеют term
- как каждый год , каждые 5 лет или каждые 6 месяцев .Все они написаны как {число} {годы / месяцы / недели}.
Мне нужен запрос, который дает мне проверку, ближайшую в будущем от заданной начальной точки в прошлом (или будущем).
Следующее дает мне next_date
, но это работает только один раз.Если ваша начальная дата была 2016/01/01, и у вас есть 6-месячный чек и годовой чек, вы всегда будете получать ежегодный чек с нижним решением, потому что 2017/01/01 является ближайшим к настоящему моменту.
select `checks`.*,
IF(SUBSTRING_INDEX(term, ' ', -1) = 'weeks', DATE_ADD('2016-01-01', INTERVAL SUBSTRING_INDEX(term, ' ', 1) week),
IF(SUBSTRING_INDEX(term, ' ', -1) = 'months', DATE_ADD('2016-01-01', INTERVAL SUBSTRING_INDEX(term, ' ', 1) month),
IF(SUBSTRING_INDEX(term, ' ', -1) = 'years', DATE_ADD('2016-01-01', INTERVAL SUBSTRING_INDEX(term, ' ', 1) year), 0)))
as next_date from `checks`
На самом деле, на момент написания статьи мне нужно было пройти проверку на 6 месяцев - потому что это должно произойти 01.06.2009, что ближе всего к моей текущей дате (2019/05/27).
Есть ли способ определить это в запросе?