mysql每月/每年重复事件

j91ykkif  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(227)

我正在研究每1/2/3/4/5或6个月/年可能发生的重复事件。我在这里找到了一些解决方案,但大多是几天/几周。
另外,我必须得到的事件是15天前到期的时间。脚本将在每天午夜运行,并检查是否有15天内到期的事件(提醒),并发送通知(插入到表中)。
这是我试过的问题。

SELECT *, ABS(TIMESTAMPDIFF(SECOND, first_date - INTERVAL 15 DAY, CURDATE())) AS diff, 
TIMESTAMPDIFF(SECOND, first_date, first_date + INTERVAL `repeat` * IF(repeat_type = '0', 1, 12) MONTH) AS tdiff FROM reminders
WHERE 
ABS(TIMESTAMPDIFF(SECOND, first_date - INTERVAL 15 DAY, CURDATE())) % 
TIMESTAMPDIFF(SECOND, first_date, first_date + INTERVAL `repeat` * IF(repeat_type = '0', 1, 12) MONTH) = 0
OR ABS(TIMESTAMPDIFF(SECOND, first_date, CURDATE())) = 0;

这个 repeat_type 确定提醒是每月发生还是每年发生(0=每月,1=每年)。这个 repeat 属性是数量(1-6)。
我认为问题在于差异(第二) TIMESTAMPDIFF ). 它计算两个日期之间的差值并返回秒数。然而,月份并不相等(28-31天),因此模(%)有时不返回零。我想我可以用某种范围来处理这个问题(模必须返回0或<=3天),但我不确定什么值是合适的。
今天是2018年9月12日(2018-09-12)。我已经在表中添加了几行,截止日期是2018-09-27,也就是从今天起的15天。当我运行上面的查询时(没有 where 我明白了:

+----+------+------------+--------+-------------+---------+----------+----------+
| id | type | first_date | repeat | repeat_type | message | diff     | tdiff    |
+----+------+------------+--------+-------------+---------+----------+----------+
| 19 | 0    | 2018-09-27 |      6 | 0           | A       |        0 | 15638400 |
| 20 | 1    | 2018-09-27 |      1 | 1           | AA      |        0 | 31536000 |
| 21 | 2    | 2018-09-27 |      1 | 1           | AAA     |        0 | 31536000 |
| 22 | 3    | 2018-09-27 |      0 | 1           | AAAA    |        0 |        0 |
| 23 | 1    | 2018-03-27 |      2 | 0           | OPA     | 15897600 |  5270400 |
+----+------+------------+--------+-------------+---------+----------+----------+

如果你看最后一行(从2018-03-27开始,每两个月重复一次),它应该出现在结果中 where 条款。但是15897600%5270400=86400(那是一天)。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题