按日期获取结果,在特定范围内每N天重复一次

时间:2019-05-07 14:21:48

标签: mysql repeat date-range

假设以下数据:

+--------------------------+
| id | created_at          |
+--------------------------+
| 1  | 2019-04-23 13:01:00 |
| 2  | 2019-04-23 13:18:00 |
| 3  | 2019-04-30 13:01:00 |
| 4  | 2019-04-30 13:06:00 |
| 5  | 2019-04-30 13:17:00 |
| 6  | 2019-04-30 13:23:00 |
| 7  | 2019-04-30 13:32:00 |
| 8  | 2019-05-04 13:19:00 |
| 9  | 2019-05-04 13:41:00 |
| 10 | 2019-05-04 13:51:00 |
+----+---------------------+

我想获取created_at在15分钟内的条目  3天前,或者过去NOW()以来每7天重复一次

例如,如果我在2019-05-07 13:30:00处运行查询,我想获取条目#2(在14天前+ 15分钟内),#5(在7天前+ 15分钟内)和#8(3天前+ 15分钟内)。

我可以轻松地写出3天的条件,但是我一直在重复7天的条件。

到目前为止我的查询:

SELECT id, created_at
FROM user_abstract
WHERE TIMESTAMPDIFF(MINUTE, created_at, NOW()) BETWEEN 3*24*60 AND 3*24*60+15

到目前为止,我已经使用上述数据集和查询创建了一个小提琴,其中可以自定义NOW()进行测试:https://www.db-fiddle.com/f/xa4ZEqEcGUDa2N3MLrgvh3/0

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

那呢?

SET @now = '2019-05-07 13:30:00';
SELECT id, created_at
FROM user_abstract
WHERE TIMESTAMPDIFF(MINUTE, created_at, NOW()) BETWEEN 3*24*60 AND 3*24*60+15
or MOD(TIMESTAMPDIFF(MINUTE, created_at, @now),7*24*60) <= 15

答案 1 :(得分:1)

您尝试应用的条件是不同的,因此必须适用这些条件,我在查询中进行了更改(第6项位于提到的第2个范围内)

SET @now = '2019-05-07 13:30:00';
SELECT id, created_at
FROM user_abstract
WHERE (TIMESTAMPDIFF(MINUTE, created_at, @now) BETWEEN 3*24*60 AND 3*24*60+15) OR
MOD(TIMESTAMPDIFF(MINUTE, created_at, @now),7*24*60) <= 15

工作demo