• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

mysql - 在MySQL中找到最接近的整数的最有效方法?

[复制链接]
菜鸟教程小白 发表于 2022-10-23 05:24:02 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在MySQL数据库中有一个表,我要从中选择时间戳最接近另一个给定时间戳的行。
time是时间戳列(整数UNIX时间戳)。我任意选择了1250710000

这是我提出的查询,我想知道是否有更有效的方法可以做到这一点:

SELECT *, ABS(time - 1250710000) AS time_dist FROM table
 ORDER BY time_dist ASC LIMIT 1

这是最好的方法吗?



Best Answer-推荐答案


假设time已建立索引,则几乎可以免费获得下一条记录:

SELECT * FROM table WHERE time > 1250710000 ORDER BY time LIMIT 1

而且,如果我没记错的话,对之前的记录也应如此,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

理想情况下,应该使用><代替>=<=,并使用其主ID排除引用记录,以说明共享相同时间戳的记录。

关于mysql - 在MySQL中找到最接近的整数的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1303651/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap