在我们获得的行之前,选择一个被识别为的行的惯用方法是什么?
说明这一点的一个例子:
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
如果我获得了b
和1
(即('b', 1)
行),我该如何编写一个查询来选择之前出现的行? (即('a', 2)
行)。如果给出“第一”行(在上面的例子中,('a', 1)
行),查询应该返回一个空行集。
答案 0 :(得分:1)
您可以使用order by
和limit
以及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