我有一个看起来像这样的表:
--------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万行需要操作.
谢谢!!
您可以使用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则使用而不是只需要一条(任意)记录.