如何获得具有列最大值的行? [重复]

问题描述 投票:0回答:1

我的桌子就像

  P_ID  |  NAME  | SRNO | Rate 
    1   |   PR1  |  1   |  50  
    1   |   PR1  |  2   |  60  
    1   |   PR1  |  3   |  80  ----
    2   |   PR2  |  1   |  10 
    2   |   PR2  |  2   |  20  ----
    3   |   PR3  |  1   |  70  ----
    4   |   PR4  |  1   |  25 
    4   |   PR4  |  2   |  35  ----

我想详细说明每个产品的SrNo为Maximum。像这样:

  P_ID  |  NAME  | SRNO | Rate 
    1   |   PR1  |  3   |  80
    2   |   PR2  |  2   |  20
    3   |   PR3  |  1   |  70
    4   |   PR4  |  2   |  35

我该怎么办?

sql-server greatest-n-per-group
1个回答
1
投票

您可以使用相关子查询:

select t.*
from mytable t
where t.srno = (select max(srno) from mytable t1 where t1.p_id = t.p_id)

(p_id, srno)上有索引,这应该是一个有效的解决方案。

Anoter常见的解决方法是使用row_number()

select pid, name, srno, rate
from (
    select t.*, row_number() over(partition by p_id order by srno desc) rn
    from mytable t
) t
where rn = 1
© www.soinside.com 2019 - 2024. All rights reserved.