首页 > 解决方案 > 按特定范围内的日期获取结果,每 N 天重复一次

问题描述

假设以下数据:

+--------------------------+
| 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_at3 天前 15 分钟窗口内的条目或过去 7 天重复的条目NOW()

例如,如果我在 运行查询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

任何帮助,将不胜感激。

标签: mysqlrepeatdate-range

解决方案


那这个呢?

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

推荐阅读