选择某个排序中给定行“之前”的行

时间:2014-02-15 19:42:17

标签: sql postgresql

在我们获得的行之前,选择一个被识别为的行的惯用方法是什么?

说明这一点的一个例子:

CREATE TABLE entry (x VARCHAR, i INTEGER);
ALTER TABLE entry ADD PRIMARY KEY (x, i);
INSERT INTO entry (x,i) VALUES ('a', 1);
INSERT INTO entry (x,i) VALUES ('a', 2);
INSERT INTO entry (x,i) VALUES ('b', 1);

表'条目'根据自然顺序具有明确的词典排序:

SELECT * FROM entry ORDER BY x, i

如果我获得了b1(即('b', 1)行),我该如何编写一个查询来选择之前出现的行? (即('a', 2)行)。如果给出“第一”行(在上面的例子中,('a', 1)行),查询应该返回一个空行集。

2 个答案:

答案 0 :(得分:1)

您可以使用order bylimit以及where条款执行此操作:

select e.*
from entry e
where x < 'b' or x = 'b' and i < 1
order by x desc, b desc
limit 1;

答案 1 :(得分:1)

使用LAG窗口功能。 (适当时也是LEAD)

http://www.postgresql.org/docs/8.4/static/functions-window.html