У меня есть следующая проблема, я хочу ограничить общее количество возвращаемых предметов, ограничивая одно значение определенным числом
Я делаю запрос, подобный этому
select * from messages order by m.priority ASC limit 5;
Теперь я Я хочу сделать следующее, у меня есть поле с именем running, и я хочу сказать, что в этих результатах я хочу иметь максимум n результатов, которые не запущены, например, 2, но я все еще хочу получить 5 результатов на основе приоритет
Итак, если у меня есть, например, следующие данные в БД:
priority | running
----------+---------
1 | true
2 | false
3 | false
4 | false
5 | false
6 | true
7 | true
8 | true
И у меня есть общий лимит 5 и неработающий лимит 2, я ожидаю следующее результат
priority | running
----------+---------
1 | true
2 | false
6 | true
7 | true
8 | true
Есть ли у кого-нибудь предложения, как это сделать в PostgreSQL?
Обновление: я получил запрос, который дает желаемый результат, на основе ответа @Gordon Linoff
select m.*
from (select t.*,
row_number() over (partition by t.running order by t.priority) as seqnum
from message t) m
where ((not m.running and seqnum <= 2) or (m.running and seqnum <= 5)) order by m.priority limit 5;
Ссылка http://sqlfiddle.com/#! 17/98477/1