Как выбрать записи вокруг отметки времени другой записи? - PullRequest
0 голосов
/ 19 апреля 2020

Я бьюсь головой об этом: мне нужно выбрать все записи вверх или вниз "рядом" с отметкой времени другой записи в течение n минут. Примеры, которые я видел, используют NOW (), но проблема в том, что мне нужно использовать метку времени записи, а не текущее время. Пример:

ID      timestamp
851     2020-04-17 12:56:02     
850     2020-04-17 09:40:01     
849     2020-04-17 09:39:02     
848     2020-04-17 09:39:01     
847     2020-04-17 09:36:02     
**846   2020-04-17 09:36:02**   
845     2020-04-17 09:36:02     
844     2020-04-17 09:36:01     
843     2020-04-17 09:36:01     
842     2020-04-17 09:31:01     
841     2020-04-17 09:11:02     
840     2020-04-16 22:13:02     

Скажем, я буду использовать идентификатор записи 846 в качестве основной метки времени и хочу получить все записи в течение 5 минут, ожидаемый результат должен быть: от 850 до 842, исключая 851 и 841 , 840. Как в мире я могу это сделать? :)


Итак, наконец, чтобы получить эти записи в течение одной минуты, я получил кое-что, используя это (я буду знать заранее) это будет идентификатор записи, который будет использоваться в качестве основной точки для поиска ближайших записей):

SELECT
    Id, 
    date_in,
FROM t 
WHERE (TIMESTAMPDIFF(MINUTE, date_in,
                        (SELECT date_in FROM t WHERE Id = 846)
                    ) = 0 
       )
ORDER BY Id DESC LIMIT 20

ID      timestamp
847     2020-04-17 09:36:02
**846   2020-04-17 09:36:02**
845     2020-04-17 09:36:02
844     2020-04-17 09:36:01
843     2020-04-17 09:36:01

1 Ответ

0 голосов
/ 20 апреля 2020

Таким образом, чтобы использовать диапазон больше 1 минуты, я придумал это, работает нормально, но я не знаю, является ли правильный путь. Это позволяет выбрать записи в течение 20 минут, используя метку времени в качестве отправной точки:

SELECT
    Id, 
    date_in,
FROM t 
WHERE (TIMESTAMPDIFF(MINUTE, date_in,
                        (SELECT date_in FROM t WHERE Id = 846)
                    ) = < 20 
       )
       AND
       (TIMESTAMPDIFF(MINUTE, date_in,
                        (SELECT date_in FROM t WHERE Id = 846)
                    ) = > -20 
       )
ORDER BY Id DESC LIMIT 20

ID      timestamp
850     2020-04-17 09:40:01     
849     2020-04-17 09:39:02     
848     2020-04-17 09:39:01     
847     2020-04-17 09:36:02     
**846   2020-04-17 09:36:02**   
845     2020-04-17 09:36:02     
844     2020-04-17 09:36:01     
843     2020-04-17 09:36:01     
842     2020-04-17 09:31:01         
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...