Lu4*_*Lu4 5 sql sql-server greatest-n-per-group
请考虑以下SQL Server表:
ID | X | Y
------+-------+-------
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 40
5 | 2 | 500
6 | 3 | 1
7 | 3 | 100
8 | 3 | 10
Run Code Online (Sandbox Code Playgroud)
我需要选择Y的最大值为Y的行的ID,即:
ID | X | Y
------+-------+-------
3 | 1 | 3
5 | 2 | 500
7 | 3 | 100
Run Code Online (Sandbox Code Playgroud)
查询将嵌套多次,因此需要最佳性能解决方案......
设置:
declare @MyTable table(ID int, X int, Y int)
insert @MyTable
values
( 1 , 1 , 1),
( 2 , 1 , 2),
( 3 , 1 , 3),
( 4 , 2 , 40),
( 5 , 2 , 500),
( 6 , 3 , 1),
( 7 , 3 , 100),
( 8 , 3 , 10)
Run Code Online (Sandbox Code Playgroud)
询问:
;with cte
as
(
select *, row_number() over(partition by X order by Y desc) RowNumber
from @MyTable
)
select Id, X, Y
from cte
where RowNumber = 1
Run Code Online (Sandbox Code Playgroud)
结果:
Id X Y
----------- ----------- -----------
3 1 3
5 2 500
7 3 100
Run Code Online (Sandbox Code Playgroud)
该查询适用于 MS SQL 2005+。该设置适用于 MS SQL 2008+。
| 归档时间: |
|
| 查看次数: |
2232 次 |
| 最近记录: |