我在MySQL数据库中有一个表,我想从中选择与另一个给定时间戳具有最接近时间戳的行.
time
是timestamp列(整数UNIX时间戳).我1250710000
任意选择.
这是我提出的查询,我想知道是否有更有效的方法:
SELECT *, ABS(time - 1250710000) AS time_dist FROM table
ORDER BY time_dist ASC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗?
Jos*_*vis 10
假设time
已编入索引,您几乎可以免费获得下一条记录:
SELECT * FROM table WHERE time > 1250710000 ORDER BY time LIMIT 1
Run Code Online (Sandbox Code Playgroud)
如果我没有错,同样适用于前一条记录,MySQL将以相反的顺序读取索引.使用两者中的UNION,按日期差异命令它们瞧!结果将如下所示
SELECT *
FROM
(
(SELECT *, ABS(time - 1250710000) AS time_diff FROM table WHERE time > 1250710000 ORDER BY time ASC LIMIT 1)
UNION ALL
(SELECT *, ABS(time - 1250710000) AS time_diff FROM table WHERE time < 1250710000 ORDER BY time DESC LIMIT 1)
) AS tmp
ORDER BY time_diff
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
理想情况下,代替>
并且<
您应该使用>=
和<=
使用其主ID来排除引用记录,以便考虑共享相同时间戳的记录.