2015-05-22 3 views
1

У меня есть таблица, в которой хранится datetime. Операция была last_run, у меня также есть столбец frequency, который является частотой в месяцах, в течение которой операция должна выполняться.Изменить блок DATE_ADD на основе значения столбца

+----+---------------------+-----------+ 
| id | last_run   | frequency | 
+----+---------------------+-----------+ 
| 1 | 2014-05-22 00:00:00 | 12  | 
|----|---------------------|-----------| 
| 2 | 2015-05-15 00:00:00 | 0.25 | 
+----+---------------------+-----------+ 

Я использую следующий запрос, чтобы получить дату, что следующая операция должна выполняться:

SELECT DATE_ADD(last_run, INTERVAL frequency MONTH) AS next_run FROM table;

Это не возвращает правильный next_run дату на второй записи из-за frequency значение.

Можно добавить условие, так что, когда frequency = 0.25

  • frequency становится 7
  • MONTH становится DAY

Это является частью старой системы, я в настоящее время рефакторинга. Было бы лучше сохранить тип интервала (DAY/MONTH/YEAR) и передать это запросу, или есть способ добавить вышеуказанные условия к запросу?

ответ

1

Я думаю, вы должны использовать большой оператор case. Что-то вроде этого:

select (case when frequency >= 1 
      then DATE_ADD(last_run, INTERVAL frequency MONTH) 
      when frequency < 1 
      then DATE_ADD(last_run, INTERVAL frequency*28 DAY) 
      ELSE DATE_ADD(last_run, INTERVAL 1 MONTH) --Adding for may be null values 
     end) 
Смежные вопросы