postgres偏移值不是数字

时间:2016-08-01 15:50:14

标签: postgresql subquery offset

我有一个至少包含“name”列和“ordinal_position”列的表。我希望从用户输入的某一行开始循环每一行。假设用户输入“John”,并且他的ordinal_position为6(总共10个)。如何在不使用子查询的情况下仅循环最后4行?我已经尝试使用“OVER()”窗口函数,但它似乎不适用于查询的偏移部分,并且相同的偏移量只需要数字(据我所知)而不是字符串。

编辑(回应klin):

INSERT INTO foo(id,name,ordinal_position) VALUES
(DEFAULT,'Peter',1),
(DEFAULT,'James',2),
(DEFAULT,'Freddy',3),
(DEFAULT,'Mark',4),
(DEFAULT,'Jack',5),
(DEFAULT,'John',6),
(DEFAULT,'Will',7),
(DEFAULT,'Robert',8),
(DEFAULT,'Dave',9),
(DEFAULT,'Michael',10);

所以在我的FOR中,因为用户输入了“John”,我想循环通过Will-Michael。像下面的东西,但没有子查询:

SELECT * FROM foo ORDER BY ordinal_position OFFSET
    (SELECT ordinal_position FROM foo WHERE name='John');

1 个答案:

答案 0 :(得分:0)

不幸的是,您必须查询表格才能找到给定ordinal_position的{​​{1}}。 但是,请勿使用name。您可以在offset子句中执行此操作,对于大型表,它会更快:

where