2014-09-01 2 views
0

Смотрите пример ниже,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); 

И если я Execute

select * from data limit 2; 

Получат

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

Итак, как я Получите последние 2 строки в select * from data?


Что я ожидаю это ....

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

Ваше предположение неверное. * Если 'ORDER BY' не задано, строки возвращаются в любом порядке, который система находит быстрее всего. * Http://www.postgresql.org/docs/current/static/sql-select.html - ваш первый (пример) набор результатов не гарантированно будет с наименьшими значениями в столбце 'value' f.ex. – pozs

ответ

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; 
0

использование Сделано из Order by пункта

select * from data order by value desc limit 2; 

ИЛИ

select top 2 * from data order by value desc ; 
0

Вы можете достичь его с помощью Сортировать по Предложение по убыванию

SELECT * 
FROM data 
ORDER BY value DESC limit 2; 
+0

Индекс на 'значение DESC' может быть полезен, если вы тоже это сделаете. –

+0

Да .. ты прав Крейг .... –

Смежные вопросы