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

SQL: the most effective way to get row number of one element

我有table个人:

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)?我的意思是我不需要任何其他数据。我只需要一件事——知道 id=3 的人在区间 WHERE ID>1 AND ID<5 中的行位置。

如果可能的话,我希望获得的不是特定于供应商的解决方案,而是通用的 sql 解决方案。如果不可能,那么我需要 postgresql 和 h2.

的解决方案

行号是间隔中第一行与您要查找的行之间的行数。对于间隔 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
        )

如果该行不存在,这将 return 0