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

SQL查询以选择“下一个”记录(类似于“前N个”或“前N个”)

况谦
2023-03-14
问题内容

如果某个记录不存在,我需要执行查询以返回下一个(或上一个)记录。例如,考虑下表:

ID (primary key)    value
1                    John
3                    Bob
9                    Mike
10                   Tom.

如果7不存在,我想查询ID为7或更大的记录。

我的问题是

  1. SQL可以进行这些类型的查询吗?
  2. 数据库世界中这些查询称为什么?

谢谢!


问题答案:

是的,这是可能的,但是实现将取决于您的RDBMS。

这是在MySQL,PostgreSQL和SQLite中的样子:

select ID, value
from YourTable
where id >= 7
order by id
limit 1

在MS SQL Server,Sybase和MS-Access中:

select top 1 ID, value
from YourTable
where id >= 7
order by id

在Oracle中:

select * from (
    select ID, value
    from YourTable
    where id >= 7 
    order by id
)
where rownum = 1

在Firebird和Informix中:

select first 1 ID, value
from YourTable
where id >= 7
order by id

在DB / 2中(此语法在SQL-2008标准中):

select id, value
from YourTable
where id >= 7
order by id
fetch first 1 rows only

在具有“窗口”功能的RDBMS中(在SQL-2003标准中):

select ID, Value
from (
  select 
    ROW_NUMBER() OVER (ORDER BY id) as rownumber,
    Id, Value
  from YourTable
  where id >= 7
) as tmp                  --- remove the "as" for Oracle
where rownumber = 1

而且,如果您不确定拥有哪个RDBMS,请执行以下操作:

select ID, value
from YourTable
where id = 
      ( select min(id)
        from YourTable
        where id >= 7
      )


 类似资料:
  • 问题内容: 我试图从看起来像这样的数据库表结果中选择前2条记录 我试过这个查询 但是有些主题,例如失踪的地方,我什至尝试了以下链接的建议 如何选择每个组的前N行? 但是我为每个受检者得到两个以上 我究竟做错了什么? 问题答案: 您可以使用相关的子查询: 该查询通过串联三列来构造单列主键。如果您有真正的主键(如),则可以用代替。 SQL Fiddle中的示例。

  • 问题内容: 我真的很困惑查询需要返回在特定列上具有最大值的前N行。 例如,如果行具有相同的值。我必须返回还是要排。 问题答案: 如果您这样做: 您将获得前N行。 如果您这样做: 或者,您可以将其表达为: 从概念上讲,以下是您想要执行的操作,但在MySQL中可能不起作用:

  • 问题内容: 如何从表中选择前n个最大值? 对于这样的表: 对于n = 2,结果需要为: 下面的方法仅为每个组选择最大值。 返回值: 问题答案: 对于n = 2,您可以 对于任何n,您都可以使用此处介绍的方法模拟分区之上的排名。 编辑:其实这个文章会给你你需要什么。 基本上是这样的 用要分组的列的名称和保存值的列的名称替换。 要弄清楚它的功能是如何进行的,请从最内部的查询中逐步进行并运行它们。 而且

  • 问题内容: 有没有一种方法可以选择特定数量的行而不创建表。例如,如果我使用以下内容: 它将给我10个,我想要10个新行。 谢谢 问题答案: 您可以使用递归CTE在T- SQL中生成任意数字序列,如下所示:

  • 问题内容: 我有一个程序尝试为每个特工在表格中插入样本,每个特工的样本数量因某些计算而异 我到这里的错误是 消息4115,级别15,状态1,第4 行在TOP子句的参数中不允许引用列“ samplesize”。此处仅允许引用外部作用域的列或独立的表达式和子查询。 有没有解决方法? 任何帮助表示赞赏。 提前致谢。 问题答案: 您可以用来做基本上相同的事情: 您也许可以简化一下,但是我不知道它是否来自d

  • 问题内容: 我有一个表,其中包含许多ID和与每个ID相关联的许多日期,甚至还有一些没有日期的ID。对于每个ID和日期组合,我想选择ID,日期和也与该ID关联的下一个最大日期;如果不存在,则选择null作为下一个日期。 样品表: 所需的输出: 问题答案: SELECT mytable.id, mytable.date, ( SELECT MIN(mytablemin.date) FROM mytab