获取按列过滤的前一行

时间:2015-10-13 15:06:35

标签: sql postgresql

我有一个像这样的简单表

Person
    id,order
    1;5
    2;3
    3;1
    4;2
    5;4

我需要使用订单栏获取以前的行 例如,如果id参数是5(order = 4),我需要返回行id:2,4,3。 如果id为2(order = 3),我需要返回行id 4,3

很抱歉,如果我努力让我理解

我创建了这个请求,但是我很难让它工作

select * 
from Person p
where p.id= (
Select p2.id
from Person p2
where p2.id=1 /*so should return rows [ 5,2,4,3]*/
and p2.order< p2.order 
)

期望的输出

 id,order  
 5;4   
 2;3     
 4;2
 3;1

非常感谢

2 个答案:

答案 0 :(得分:3)

您只需选择{ID <1}小于ID-Order的所有内容:

order

Demo

答案 1 :(得分:1)

这符合您的描述:

SELECT * FROM Person
    WHERE "order" < 
        (SELECT "order" order FROM Person WHERE id = 5)

子选择用于检索&#34;命令&#34;指定行的。在子选择中,我执行减法以找到先前的值。这在select的where子句中用于获取所需的行。