如果某个记录不存在,我需要执行查询以返回下一个(或上一个)记录。例如,考虑下表:
ID (primary key) value
1 John
3 Bob
9 Mike
10 Tom.
如果7不存在,我想查询ID为7或更大的记录。
我的问题是
谢谢!
是的,这是可能的,但是实现将取决于您的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