получать результаты по дате в определенном диапазоне, повторяемые каждые N дней - PullRequest
1 голос
/ 07 мая 2019

Принимая следующие данные:

+--------------------------+
| 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 дня назад ИЛИ каждые повторяющиеся 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

Буду признателен за любую помощь.

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Условия, которые вы пытаетесь применить, различны, поэтому эти условия должны применяться, я внес изменения в ваш запрос (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

Работает демо .

1 голос
/ 07 мая 2019

Как насчет этого?

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
...