见下面的例子,
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)
答案 0 :(得分:1)
根据您的需要,您有两种选择,即
select * from data order by value desc limit 2
或者
如果你想要第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
替换要作为“最后”条目的排序依据。以我的经验,此方法比使用计数查找偏移量快一个数量级。