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 分钟的范围,我想出了这个,效果很好,但我不知道是否是正确的方法。这是以一个人的时间戳为起点,在 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
推荐阅读
- python - 创建python objectify Element然后添加属性
- python - Python sklearn LogisticRegression ValueError: invalid __array_struct__
- powershell - PowerShell - 找不到长路径但文件存在
- sql-server - 根据 SQL SERVER 中的行标签动态地 NULL last 然后 2 last rows
- python - Python根据值对JSON进行排序
- php - 更新列后如何更新另一行的列
- php - 将基于一列或另一列的结果组合在一起
- php - 从 php shell_exec() 格式化 npm run 输出
- c# - 正确处理对象
- jquery - 使用 chartjs 生成基本饼图