当前位置: 首页 > 面试题库 >

用mysql选择围绕id的行之前和之后

陆才俊
2023-03-14
问题内容

我需要使用mySQL获取围绕ID的ID。

例子:

表格中的ID:

2, 4, 5, 9, 11, 15, 19, 22, 25

例如,我需要知道ID 9周围的5个ID。查询应返回:

4, 5, 9, 11, 15

谢谢!


问题答案:

一个可能的解决方案是

  • 计算每个ID的绝对值,然后减去ID。
  • 排序结果并将结果集限制为5个记录。

SQL语句

SELECT ABS(ID - 9), *
FROM   MyTable
ORDER BY
       ABS(ID - 9)
LIMIT  5

编辑 (向ypercube表示感谢,以指出此解决方案中可能存在的缺陷)

如果要从左侧获取2个id,从右侧获取2个id,则可以按以下方式调整该语句

SELECT * FROM MyTable WHERE ID <= 9 ORDER BY ID DESC LIMIT 3 
UNION ALL
SELECT * FROM MyTable WHERE ID > 9  ORDER BY ID ASC  LIMIT 2


 类似资料:
  • 桌面视频 我想选择从给定时间间隔6个月的行。新的还是旧的 因此,如果查询时间为例如1446076800,则将选择比该时间早6个月或新6个月的所有行。 采用UNIX TIMESTAMP格式。 因此,如果一个视频是在2015年10月上传的,所有在2015年4月上传的视频和更新的视频都将被选中。从2015年10月到2016年4月的所有视频也将被选中。

  • 问题内容: 是否可以为查询的IN部分定义一个范围,像这样 代替 问题答案: 您不能,但可以使用 请注意,这是包含性内容,并且将包含ID为10和15的项。 如果不想包含,则必须退回到使用and 运算符。

  • 问题内容: 我必须检查特定时间是否介于两次(打开和关闭时间)之间。 打开和关闭时间在数据库中保存为与工作日ID(而不是日期)相关的“开始”和“结束”。 所以我的问题是,我有两种不同的情况,第一种情况是结束时间大于开始时间,例如end = 19:00:00和start = 09:00:00 但也可以是结束= 06:00:00和开始= 20:00:00 那么检查时间是否介于两次之间的性能方法是什么?

  • 问题内容: 这类似于问题如何在Java Swing中构建Google- chrome标签和菜单栏界面?(我想实现相同的目的),但更重要的是:如何在JTabbedPane中的选项卡的前面和后面放置组件? 我已经自己想到了按钮的想法,但是我宁愿有一个JTabbedPane,因为它确实是它的意思,但是在侧面装饰有按钮或图标。 我已经看到,基里尔(Kirill)的laf-widget项目对多个LaF都执行

  • 我正准备在debian系统上构建加密库,尽管debian存储库通过apt get提供它们,但我想从源代码处这样做,以确保编译的库是最新的库,并且只使用某些选项进行构建。 默认的makefile被配置为构建一个静态库,发布build,我想根据自己的需要修改makefile,并在那里添加一些其他东西。 基本上,我只会将这些库用于学习,没有任何形式的发布程序,所以我的问题是我是否需要发布构建或调试来学习

  • 问题内容: 我正在尝试在2列之间选择一个值。这是我的数据集 我的目标是(如果我的值为2)是选择 ID为1 (在from和to之间)的行。所以这是我正在使用的查询: 这是MySQL执行此查询时返回的结果: 我正在寻找的结果如下: 我尝试使用<和>等。但是,我总是得到两个结果。任何帮助将非常感激。 问题答案: 所以,您不希望下限具有包容性,对吗?