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

如何选择相邻行到任意行(在sql或postgresql中)?

蒋权
2023-03-14
问题内容

我想根据某些条件选择一些行,然后从该集合中获取一个条目,并在其前后输入5行。

现在,如果表上有一个主键,我可以用数字方式执行此操作(例如,在数字上,主键比目标行的键小5,而目标行的键的数字多5)。

因此,选择主键为7的行以及附近的行:

select primary_key from table where primary_key > (7-5) order by primary_key limit 11;

2
3
4
5
6
-=7=-
8
9
10
11
12

但是,如果我仅选择某些行作为开始,则会丢失使用主键的数字方法(并且假设键无论如何在顺序上都没有任何间隙),并且需要另一种方法来获取之前和之后的最接近的行。在特定的目标行之后。

这样的选择的主键输出可能看起来更加随机,因此对数学定位的接受程度较低(因为某些结果将被过滤掉,例如使用where active=1):

select primary_key from table where primary_key > (34-5) 
    order by primary_key where active=1 limit 11;

30
-=34=-
80
83
100
113
125
126
127
128
129

请注意,由于示例中条件( 例如becaseu有许多不活动的项目
)所引起的主键之间的间隙,我不再获得最接近的5和下面的5,而是获得最接近的1以及上面最接近的9。


问题答案:

如果您使用一种编程语言运行两个查询,则有很多方法可以执行此操作,但是,这是在一个SQL查询中执行此操作的一种方法:

(SELECT * FROM table WHERE id >= 34 AND active = 1 ORDER BY id ASC LIMIT 6)
UNION
(SELECT * FROM table WHERE id < 34 AND active = 1 ORDER BY id DESC LIMIT 5)
ORDER BY id ASC

这将返回上面的5行,目标行和下面的5行。



 类似资料:
  • 问题内容: 我有一张桌子和一张桌子。向用户显示随机的其他用户数据,并可以决定他喜欢还是不喜欢它。我正在为尚未评级的代理用户选择新的随机用户合作伙伴! 现在,我试图选择表中没有行的所有用户,并将执行用户与已评级用户的关系评级。 该表是一个标准的用户表,在我的列,,,和。 我正在使用Laravel Eloquent,但也可以使用原始sql。 我的尝试: 这是错误的,因为通过此尝试我没有选择任何新用户。

  • 问题内容: 我正在使用MSSQL Server2005。在我的数据库中,我有一个表“ customerNames”,其中有两列“ Id”和“ Name”以及大约。1,000个结果。 我正在创建一个功能,每次必须随机选择5个客户。谁能告诉我如何创建一个查询,该查询每次执行查询时都会随机获得5行(Id和Name)? 问题答案: 也就是说,似乎每个人都可以访问此页面,以获取对您的问题的更一般的答案: 在

  • 问题内容: 我根据员工的工作时间做一些报告。在某些情况下,数据包含两个单独的记录,这实际上是一个时间段。 这是该表的基本版本和一些示例记录: 数据: 在该示例中,最后两个记录在时间上是连续的。我想编写一个查询,该查询结合了所有相邻记录,因此结果集是这样的: 理想情况下,它还应该能够处理两个以上的相邻记录,但这不是必需的。 问题答案: 本文为您的问题提供了许多可能的解决方案 http://www.s

  • 我有一个名为的表 它有100列:{,,...,} 我了解如何特定列中不包含空值的行,例如: 如何任何列中不包含空值的所有行 但这将在(我正在使用)中返回一个错误

  • 问题内容: 我有一个看起来像这样的报告: 这是通过SQL完成的(特别是T-SQL版本的Server 2005): 我希望该报告仅显示每个工作流程的最早日期: 有任何想法吗?我不知道这一点。我尝试使用嵌套的选择返回最早的托盘日期,然后在WHERE子句中进行设置。如果只有一家公司,这将非常有用: 但是,如果该表中有不止一家公司,那么这显然将行不通。任何帮助表示赞赏! 问题答案: 只需使用

  • 编辑:我调试了应用程序,并用初始化了。这消除了错误,但是现在ImageView没有得到更新,但是当我从Gallery中选择image时,它已经更新了。