如何在SQL查询返回的结果下面选择10行?

时间:2010-01-20 20:33:10

标签: sql

这是SQL表:

KEY | NAME    | VALUE  
---------------------
13b | Jeffrey | 23.5  
F48 | Jonas   | 18.2  
2G8 | Debby   | 21.1

现在,如果我输入:

SELECT * 
  FROM table  
 WHERE VALUE = 23.5

我将获得第一行。

我需要完成的是获得下面的第一行和下两行。有办法吗?

列没有排序,WHERE条件不参与行的选择,第一行除外。我只需要在返回的行之下添加另外两行 - 在SELECT查询返回的行之后输入的行。

6 个答案:

答案 0 :(得分:6)

如果没有日期列或自动增量列,则无法可靠地确定记录的输入顺序。

表中存储行的物理顺序是不确定的。

答案 1 :(得分:2)

需要为结果定义订单以执行此操作。否则,数据无法保证订单。 如果“接下来的两行”表示“在该特定行之后插入表中的下两条记录”,则需要使用自动递增字段或“日期创建”时间戳字段来执行此操作。 / p>

答案 2 :(得分:1)

如果每一行都有一个唯一且自动递增的ID列,您可以执行以下操作:

SELECT * FROM table WHERE id > (SELECT id FROM table WHERE value = 23.5)

答案 3 :(得分:0)

如果我理解正确,你会找到类似的东西: SELECT * FROM table WHERE value <> 23.5

答案 4 :(得分:0)

你显然可以编写一个程序来做到这一点,但我假设你想要一个查询。怎么样使用联盟。您还必须在这些行中创建一个名为value_id的新列,这些列会按顺序递增(可能使用序列)。我们的想法是每次插入都会增加value_id并使用它来编写一个where子句来返回你想要的剩余两个值。

例如:

从表格中选择*,其中值= 23.5 联盟 从表格中选择*,其中value_id&gt; 2限制2;

限制2,因为您已在第一个查询中获得第一个值

答案 5 :(得分:0)

如果您希望能够以“之前”和“之后”的方式思考,则需要订单。

假设您有一个可以使用ROW_NUMBER()(请参阅此处http://msdn.microsoft.com/en-us/library/ms186734.aspx)并执行以下操作:

With MyTable
(select row_number() over (order by key) as n, key, name, value
from table)

select key, name, value
from MyTable
where n >= (select n from MyTable where value = 23.5)