SQL:获取一个元素的行号的最有效方法

时间:2015-07-22 17:34:11

标签: sql database postgresql h2

我有一张人的表:

id   | Name |  Age
1    | Alex |  18
2    | Peter|  30
3    | Zack |  25
4    | Bim  |  30
5    | Ken  |  20

我有以下行间隔:WHERE ID>1 AND ID<5。我知道在这个区间有一个人的id = 3。在这个时间间隔内获取行号的最有效(最快)的方法是什么(在我的例子中rownumber = 2)?我的意思是我不需要任何其他数据。我只需要一件事 - 在区间WHERE ID>1 AND ID<5中知道id = 3的人的行位置。

如果可能的话,我希望不是供应商特定的解决方案,而是一般的SQL解决方案。如果不可能那么我需要postgresql和h2的解决方案。

1 个答案:

答案 0 :(得分:3)

行号将是间隔中第一行与您要查找的行之间的行数。对于时间间隔ID>1 AND ID<5和目标行ID=3,这是:

select  count(*)
from    YourTable
where   id between 2 and 3

对于时间间隔ID>314 AND ID<1592和目标行ID=1000,您可以使用:

where   id between 315 and 1000

要确保存在ID=3的元素,请使用:

select  count(*)
from    YourTable
where   id between 2 and
        (
        select  id
        from    YourTable 
        where   id = 3
        )

如果该行不存在,则返回0