删除SQL Server中的最低排名行

Sam*_*Sam 2 sql sql-server

我有一张如下表.

Customer    Order        Rank
1             12           3
1             14           7
2             15           6
2             16           4
2             17           2
2             21           1
3             24           5
3             25           6
3             27           7
Run Code Online (Sandbox Code Playgroud)

现在,我想选择除每个客户的排名最小的行之外的所有行.它应该如下所示.

Customer    Order        Rank
1             14           7
2             15           6
2             16           4
2             17           2
3             25           6
3             27           7
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 6

你可以使用CTE+ ROW_NUMBER:

WITH CTE AS
(
    SELECT Customer, [Order], Rank,
           RN = ROW_NUMBER() OVER (PARTITION BY Customer ORDER BY Rank)
    FROM dbo.Customers
)
SELECT Customer, [Order], Rank 
FROM CTE 
WHERE RN > 1
ORDER BY Customer, Rank DESC
Run Code Online (Sandbox Code Playgroud)

演示:http://sqlfiddle.com/#!6/444be/3/0