如何选择每行的最大值?

时间:2019-12-04 03:52:26

标签: sql postgresql

我使用的是Postgres SQL,我想返回具有最大seq编号的行。

例如:

row_name, seq, data
row1, 1, abc
row1, 2, def
row2, 1, hij
row2, 2, klm
row2, 3, nop

我希望结果是:

row1, 2, def
row2, 3, nop

我正在使用:

SELECT * FROM table_name where seq = (SELECT MAX(seq) from table_name)

但它仅返回第2行,第3行。

请帮助谢谢。

5 个答案:

答案 0 :(得分:1)

使用subquery,然后内部加入max(seq).

select * from table_name t
inner join 
    (select max(seq) seq, row_name from table_name group by row_name) t1 on t1.row_name = t.row_name and t.seq = t1.seq

答案 1 :(得分:0)

您还可以使用ROW_NUMBER来获得所需的输出,如下所示-

DEMO HERE

<img id="robot" src="https://img.favpng.com/20/7/18/clip-art-robot-free-content-image-vector-graphics-png-favpng-pJhfbKDrGy0yuQsKVTrjEu7br.jpg">

答案 2 :(得分:0)

SELECT 
    row_name, seq, data
FROM (
  SELECT 
    row_name, seq,  data, 
    max( seq) over(partition by row_name) max_seq 
  FROM your_table
) S
where seq=max_seq

答案 3 :(得分:0)

在Postgres中,针对此类问题最有效的解决方案通常是使用distinct on ()

select distinct on (row_name) row_name, seq, data
from the_table
order by row_name, seq desc;

答案 4 :(得分:-1)

我们也可以通过降序使用它。

 SELECT *FROM table_name ORDER BY column1, column2 DESC