Выберите максимальное значение из столбца для каждого значения в двух других столбцах - PullRequest
0 голосов
/ 30 июня 2018

Я работаю над веб-приложением, которое отслеживает телепередачи, и мне нужно получить все идентификаторы эпизодов, которые являются финалами сезона, что означает самое высокое число эпизодов из всех сезонов для всех телепрограмм.

Это упрощенная версия моей таблицы "эпизодов".

 id   tvshow_id   season   epnum
 ---|-----------|--------|-------
 1  |     1     |    1   |   1
 2  |     1     |    1   |   2
 3  |     1     |    1   |   3
 4  |     1     |    2   |   1
 5  |     1     |    2   |   2
 6  |     2     |    1   |   1
 7  |     2     |    1   |   2
 8  |     2     |    1   |   3
 9  |     2     |    1   |   4
10  |     2     |    2   |   1
11  |     2     |    2   |   2

Ожидаемый результат:

 id
 ---|
 3  |
 5  |
 9  |
11  |

Мне удалось заставить это работать в течение последнего сезона, но я не могу заставить его работать в течение всех сезонов.

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

Я использую Postgres v10

Ответы [ 3 ]

0 голосов
/ 30 июня 2018
SELECT Id from
(Select *, Row_number() over (partition by tvshow_id,season order by epnum desc) as ranking from tbl)c
Where ranking=1
0 голосов
/ 01 июля 2018

Ниже приведен простой запрос для получения желаемого результата. Приведенный ниже запрос также хорош по производительности благодаря использованию Different on () clause

  select
   distinct on (tvshow_id,season)
   id
  from your_table
  order by tvshow_id,season ,epnum desc
0 голосов
/ 30 июня 2018

Вы можете использовать приведенный ниже SQL для получения результата, используя GROUP BY с подзапросом как:

select id from tab_x
where (tvshow_id,season,epnum) in (
select tvshow_id,season,max(epnum)
from tab_x
group by tvshow_id,season)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...