SQL лимит 2 запроса - PullRequest
       1

SQL лимит 2 запроса

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

У меня есть следующая проблема, я хочу ограничить общее количество возвращаемых предметов, ограничивая одно значение определенным числом

Я делаю запрос, подобный этому

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

1 Ответ

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

Я думаю, что вы хотите:

select m.*
from (select m.*,
             row_number() over (partition by running order by m.priority) as seqnum
      from messages
     ) m
where ((not m.running and seqnum <= 2) or
       (m.running and seqnum <= 3)
      );

Здесь 3 = 5 - 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...