我有一个存储datetime
操作last_run
的表,我还有一个frequency
列,这是操作应该运行的频率(以月为单位)。< / p>
+----+---------------------+-----------+
| 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
),并将其传递给查询,还是有办法将上述条件添加到查询中?
答案 0 :(得分: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)