这是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查询返回的行之后输入的行。
答案 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)