如何在SQL查询中选择每个组的第一行?

maf*_*afu 13 sql sql-server-ce

我有这个SQL查询:

SELECT   Foo, Bar, SUM(Values) AS Sum
FROM     SomeTable
GROUP BY Foo, Bar
ORDER BY Foo DESC, Sum DESC
Run Code Online (Sandbox Code Playgroud)

这导致输出类似于:

47  1   100
47  0   10
47  2   10
46  0   100
46  1   10
46  2   10
44  0   2
Run Code Online (Sandbox Code Playgroud)

我想每个Foo只有第一行,而忽略其余的.

47  1   100
46  0   100
44  0   2
Run Code Online (Sandbox Code Playgroud)

我怎么做?

Ant*_*iev 25

declare @sometable table ( foo int, bar int, value int )

insert into @sometable values (47, 1, 100)
insert into @sometable values (47, 0, 10)
insert into @sometable values (47, 2, 10)
insert into @sometable values (46, 0, 100)
insert into @sometable values (46, 1, 10)
insert into @sometable values (46, 2, 10)
insert into @sometable values (44, 0, 2)

;WITH cte AS 
(
    SELECT   Foo, Bar, SUM(value) AS SumValue, ROW_NUMBER() OVER(PARTITION BY Foo ORDER BY FOO DESC, SUM(value) DESC) AS RowNumber
    FROM     @SomeTable
    GROUP BY Foo, Bar
)
SELECT * 
FROM cte
WHERE RowNumber = 1
Run Code Online (Sandbox Code Playgroud)