如何在另一个记录的时间戳附近选择记录?

时间:2020-04-19 19:32:08

标签: mysql

正在为这个问题努力奋斗:我需要在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     

说我将使用记录ID 846作为主要时间戳,并希望在5分钟之内获取所有记录,我期待的结果应该是:850至842,不包括851和841、840。我能做到的世界?:)


最后,为了在一分钟内获得这些记录,我使用了一些东西(我会知道正手,这将是记录ID,将其用作查找附近记录的主要点):

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 :(得分:0)

所以要使用大于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