此问题已经在这里有了答案:
我的桌子就像
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
我该怎么办?
您可以使用相关子查询:
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