当按照与ID无关的条件排序时,选择出现在具有给定ID的行之后的行

Yur*_*dow 1 sql postgresql activerecord

鉴于"人"表中的数据:

+----+-------+
| id | name  |
+----+-------+
|  1 | Jane  |
|  2 | Joe   |
|  4 | John  |
|  5 | Alice |
|  6 | Bob   |
+----+-------+
Run Code Online (Sandbox Code Playgroud)

顺序:

SELECT * FROM people ORDER BY name
Run Code Online (Sandbox Code Playgroud)

...将返回:

+----+-------+
| id | name  |
+----+-------+
|  5 | Alice |
|  6 | Bob   |
|  1 | Jane  |
|  2 | Joe   |
|  4 | John  |
+----+-------+
Run Code Online (Sandbox Code Playgroud)

如何写一个查询 - 包括上面的顺序 - 只返回具有给定id的那个之后的行,例如,如果给定id为1,它将返回:

+----+-------+
| id | name  |
+----+-------+
|  2 | Joe   |
|  4 | John  |
+----+-------+
Run Code Online (Sandbox Code Playgroud)

要清楚,id是可变的,并且在手之前是未知的.

使用通常支持的SQL的方法会很棒,但如果它们有任何其他用途,我会使用PostgreSQL 9.2和ActiveRecord 3.2,例如OVER()和ROW_NUMBER().

[编辑]我之前显示了错误的所需结果集,包括具有给定id的行.但是,如问题中所述,结果集应仅包含给定ID 之后的行.

Clo*_*eto 6

select *
from people
where
    name >= (
        select name
        from people
        where id = 1
    )
    and id != 1
order by name
Run Code Online (Sandbox Code Playgroud)