У меня есть несколько таблиц базы данных, содержащих некоторые документы, которые люди должны подписать.Таблицы определены (несколько упрощенно) следующим образом.
create table agreement (
id integer NOT NULL,
name character varying(50) NOT NULL,
org_id integer NOT NULL,
CONSTRAINT agreement_pkey PRIMARY KEY (id)
CONSTRAINT org FOREIGN KEY (org_id) REFERENCES org (id) MATCH SIMPLE
)
create table version (
id integer NOT NULL,
content text NOT NULL,
publish_date timestamp NOT NULL,
agreement_id integer NOT NULL,
CONSTRAINT version_pkey PRIMARY KEY (id)
CONSTRAINT agr FOREIGN KEY (agreement_id) REFERENCES agreement (id) MATCH SIMPLE
)
Я пропустил таблицу org, чтобы уменьшить беспорядок.Я пытался написать запрос, который дал бы мне всю необходимую информацию о соглашении для данной организации.Пока что я могу сделать
SELECT a.id, a.name FROM agreement AS a
JOIN version as v ON (a.id = v.agreement_id)
JOIN org as o ON (o.id = a.org_id)
WHERE o.name = $1
GROUP BY a.id
Это, кажется, дает мне одну запись для каждого соглашения, которое принадлежит организации, которую я хочу, и имеет по крайней мере одну версию.Но мне нужно также указать содержание и дату публикации последней доступной версии.Как мне это сделать?
Кроме того, у меня есть отдельная таблица под названием подписи, которая связана с пользователем и версией.Если возможно, я бы хотел расширить этот запрос, чтобы он включал только соглашения, в которых данный пользователь еще не подписал последнюю версию.
Редактировать: отразил необходимость в присоединении к org, поскольку я скорее выбираю orgs по именичем по id