给定这个模式(在 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
最近事件是“开始”的foo
s,或者更好的是,至少开始了一次并且stop
在最后一个事件之后没有 s 的 s start
(以防我将来添加更多事件类型)。
到目前为止,我最好的尝试是:
SELECT * FROM foo
WHERE id NOT IN
(SELECT foo_id FROM foo_event
WHERE type='stop');
当然,这里的问题是它永远不会返回任何foo
曾经停止过的 s。