2

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

--------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

我想从上面选择 Cat1 中各种类型的值最高的行。因此,我的答案如下所示:

--------EXAMPLE---------------------------------------------------------
Cat1           Cat2          Value
b              e1            143
a              e2            135
c              NULL          136

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

谢谢!!

4

1 回答 1

5

您可以使用CTEwith 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 

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

于 2013-01-21T22:03:33.483 回答