每 N 天重复一次,按日期在特定范围内获取结果
fetch results by date in a specific range repeated every N days
假设数据如下:
+--------------------------+
| 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 分钟内的条目 window
3 天前或过去 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
到目前为止,我使用上述数据集和查询创建了一个 fiddle,其中可以自定义 NOW() 以进行测试:https://www.db-fiddle.com/f/xa4ZEqEcGUDa2N3MLrgvh3/0
如有任何帮助,我们将不胜感激。
这个呢?
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
您尝试应用的条件不同,因此必须应用这些条件,我对您的查询进行了更改(第 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。
假设数据如下:
+--------------------------+
| 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 分钟内的条目 window
3 天前或过去 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
到目前为止,我使用上述数据集和查询创建了一个 fiddle,其中可以自定义 NOW() 以进行测试:https://www.db-fiddle.com/f/xa4ZEqEcGUDa2N3MLrgvh3/0
如有任何帮助,我们将不胜感激。
这个呢?
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
您尝试应用的条件不同,因此必须应用这些条件,我对您的查询进行了更改(第 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。