このスキーマが与えられた場合 (postgresql-9.2):
CREATE TABLE foo (
id serial PRIMARY KEY,
...other columns elided...
);
CREATE TYPE event_type AS ENUM ('start', 'stop');
CREATE TABLE foo_event (
id serial PRIMARY KEY,
foo_id integer NOT NULL REFERENCES foo (id),
timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
type event_type NOT NULL
);
すべての「実行中」を取得するにはどうすればよいfooですか? つまり、foo最新のイベントが「開始」であるfoos、またはさらに良いことに、少なくとも 1 回開始されstop、最後のイベントの後に sがないstart(将来さらにイベント タイプを追加する場合に備えて) s です。
これまでの私の最善の試みは次のとおりです。
SELECT * FROM foo
WHERE id NOT IN
(SELECT foo_id FROM foo_event
WHERE type='stop');
fooもちろん、ここでの問題は、これまで停止されたことのある s が返されないことです。