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 を使用しており、操作が必要なテーブルに約 4,000 万行あるため、効率的なものを探しています。

ありがとう!!

4

1 に答える 1

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 

同じ最大値を持つ複数のレコードがある場合に、単一の (任意の) レコードが必要な場合は、Row_Number代わりに使用します。Dense_Rank

于 2013-01-21T22:03:33.483 に答える