SQL для выбора только последнего элемента из версионной таблицы - PullRequest
0 голосов
/ 18 июня 2010

У меня есть таблица со следующей структурой:

CREATE TABLE items (
    id serial not null,
    title character varying(255),
    version_id integer DEFAULT 1,
    parent_id integer,
    CONSTRAINT items_pkey PRIMARY KEY (id)
)

Итак, таблица содержит строки, которые выглядят так:

id: 1, заголовок: "Version 1", version_id:1, parent_id: 1
id: 2, заголовок: «Version 2», version_id: 2, parent_id: 1
id: 3, title: «Совершенно другая запись», version_id: 1, parent_id: 3

Это код SQL, который я получил для выбора всех записей с идентификаторами самой последней версии:

select * from items
inner join (
  select parent_id, max(version_id) as version_id from items
  group by parent_id) as vi
on items.version_id = vi.version_id and items.parent_id = vi.parent_id

Есть ли способ написать этот оператор SQL, чтобы он не 'использовать подвыбор?

1 Ответ

2 голосов
/ 18 июня 2010
SELECT distinct on (parent_id) 
    parent_id
  , version_id
FROM items
ORDER BY parent_id, version_id DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...