从列中为其他两列中的每个值选择最大值

时间:2018-06-29 21:29:02

标签: sql postgresql

我正在开发一个可跟踪电视节目的Web应用程序,因此我需要获取所有作为季末结局的剧集ID,这意味着,对于所有电视节目来说,这是所有季节中最高的剧集编号。

这是我的“情节”表的简化版本。

 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  |

我设法使它在最近的一个季节都可以使用,但是我不能在所有季节都可以使用。

我也尝试从this中吸取一些想法,但似乎找不到在其中添加tvshow_id的方法。

我正在使用Postgres v10

3 个答案:

答案 0 :(得分:2)

您可以使用下面的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)

答案 1 :(得分:2)

{{1}}

答案 2 :(得分:0)

下面是获得所需结果的简单查询。在使用 distinct on()子句

的帮助下,以下查询的性能也很好
  select
   distinct on (tvshow_id,season)
   id
  from your_table
  order by tvshow_id,season ,epnum desc