在一个步骤中选择具有最大变量的行

Zan*_*nam 2 sql sql-server

我有一个看起来像这样的表:

--------EXAMPLE---------------------------------------------------------
Cat1           Cat2          Value
a              NULL          131
b              e1            143
a              e2            135
c              NULL          136
a              e1            132
a              NULL          13
c              e4            1
Run Code Online (Sandbox Code Playgroud)

我想从上面选择具有Cat1中各种类型的最高值的行.所以,我的答案如下:

--------EXAMPLE---------------------------------------------------------
Cat1           Cat2          Value
b              e1            143
a              e2            135
c              NULL          136
Run Code Online (Sandbox Code Playgroud)

我正在使用Microsoft SQL,我正在寻找一些有效的东西,因为我的表中有大约4000万行需要操作.

谢谢!!

Tim*_*ter 5

您可以使用CTE具有DENSE_RANK:

WITH cte 
     AS (SELECT cat1, 
                cat2, 
                Value, 
                Rank = Dense_rank() 
                         OVER ( 
                           partition BY cat1 
                           ORDER BY Value DESC) 
         FROM   dbo.tablename) 
SELECT cat1, 
       cat2, 
       value 
FROM   cte 
WHERE  rank = 1 
Run Code Online (Sandbox Code Playgroud)

如果只有多条记录具有相同的最高值Row_Number,Dense_Rank则使用而不是只需要一条(任意)记录.