SQL Запрос к таблице событий - PullRequest
0 голосов
/ 11 марта 2020

У меня есть таблица event в Postgres, с такой структурой:

event
--------
id: serial, pk
item_id: text, fk
status: text, an enum such as CREATED, IN_PROGRESS, DONE...

Это работает как журнал, поэтому все записи неизменны, изменение в статусе будет другой вставкой.

Я хочу эффективно извлечь все события, которые имеют статус CREATED, но не DONE.

1 Ответ

2 голосов
/ 11 марта 2020

Я предполагаю, что вы хотите ПУНКТЫ, которые отвечают условиям. Если так:

select item_id
from events
where status in ('CREATED', 'DONE')
group by item_id
having max(status) = 'CREATED';

При этом используется тот факт, что 'CREATED' < 'DONE' в алфавитном порядке. Вы также можете использовать условное агрегирование:

having count(*) filter (where status = 'DONE') = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...