SQL一步提取每个类别的最大值
我有一些数据如下所示:SQL一步提取每个类别的最大值,sql,sql-server,sql-server-2000,greatest-n-per-group,Sql,Sql Server,Sql Server 2000,Greatest N Per Group,我有一些数据如下所示: Sector Category rec_coun ------ -------- --------- A 25 53 A 24 1911 A 23 2010 A .. ..
Sector Category rec_coun
------ -------- ---------
A 25 53
A 24 1911
A 23 2010
A .. ..
A 1 190
B 25 787877
B 24 931231231
B .. ..
8 1 778787
..
C 1 6666
我想得到的是一个表格,显示每个扇区与扇区和类别组合中的最大记录数相关的类别,例如
Sector Category Max Recs
------ -------- --------
A 23 2010
B 24 931231231
....
在我上面的例子中。我希望能一步到位。我试过了
select distinct [Sector], [Category], max(rec_cnt)
from table
group by [Sector], [Category]
having rec_cnt = max(rec_cnt)
但这不好。如果可能的话,我宁愿避免嵌套查询中的内部联接,但要把最好的保存到最后。实际上,我使用的是SQL Server 2000,这可能会使这个问题变得更加棘手。我相信即使在SQL Server 2000上,使用嵌套的
分组方式也应该可以
select t.[Sector], table.[Category], t.max_rec
from table
join
(
select distinct [Sector], max(rec_cnt) max_rec
from table
group by [Sector]
) t ON table.[Sector] = t.[Sector] and table.rec_cnt = t.max_rec
使用简单的窗口函数可以做到以下几点:
select distinct [Sector],
FIRST_VALUE(Category) over (partition by Sector order by rec_cnt desc) as [Category],
max(rec_cnt) over (partition by Sector) as [rec_cnt]
from table
编辑:好的,这不能工作,因为窗口函数是从SQLServer2005开始引入的。请参阅Radim的答案,这应该有效。是时候更新到支持的软件了。SQL Server 2000多年来一直不受支持。您能否解释一下这个答案将如何解决问题,而不是只发布代码答案。
Select Sector, Category, Max(rec_cnt) as 'Max Recs'
From Table
Group By Sector, Category