PostgreSQL:如何从选择查询中获取最后一行

时间:2014-09-01 09:17:13

标签: sql postgresql

见下面的例子,

create table data(name varchar, value int);
insert into data values('joe',1);
insert into data values('bob',2);
insert into data values('jane',3);
insert into data values('anne',4);
insert into data values('kate',5);

如果我执行

select * from data limit 2;

将获得

 name | value 
------+-------
 joe  |     1
 bob  |     2
  (2 rows)

那么,我怎样才能在select * from data中获得最后两行?


我期待的是......

  name | value 
 ------+-------
  anne |     4
  kate |     5
   (2 rows)

6 个答案:

答案 0 :(得分:1)

根据您的需要,您有两种选择,即

   select * from data order by value desc limit 2

或者

LIMIT and OFFSET

如果你想要第4行和第5行只是偏移前3行,那么第4行就成了我们集合的开始,你可以指定一个限制来表示你只需要2行。

   select * from data offset 3 limit 2;
   /* The order of LIMIT and OFFSET does not matter. This gives the same result */
   select * from data limit 2 offset 3;

答案 1 :(得分:0)

利用Order by条款

select * from data order by value desc limit 2;

OR

select top 2 * from data order by value desc ;

答案 2 :(得分:0)

您可以使用订购条款desc

来实现它
SELECT *
FROM data
ORDER BY value DESC limit 2;

答案 3 :(得分:0)

就像Krishraj Rana一样,您可以尝试使用此函数获取带有“限制1”的最后一行,并按“ x col” desc进行排序,并按“按x_col desc limit 1”进行填写。

答案 4 :(得分:0)

要获取最后的x行,例如x = 10, 单独使用偏移,计数:

SELECT *
FROM data
ORDER BY value ASC
OFFSET (SELECT count(*) FROM DATA)-10

我让您检查偏移量是否为负...

答案 5 :(得分:0)

我知道我要回答一个已有六年历史的问题,并且我知道接受的答案说要使用偏移量,但是,这只有在知道表的长度的情况下才有用。通过查看问题的措辞和给出的示例,我认为与我一样,作者希望根据输入id或其他值的顺序输入表中的最后一个条目。 到目前为止,找到的最佳解决方案是按预期方式对值进行排序,这是使用子查询如下:

SELECT * FROM ( SELECT * FROM data ORDER BY VALUE DESC LIMIT 2) AS _ ORDER BY VALUE ASC;

您要用VALUE替换要作为“最后”条目的排序依据。以我的经验,此方法比使用计数查找偏移量快一个数量级。