用于查找表中代表性行的SQL查询

Ale*_*lex 2 sql

假设我有一个这样的支付表:

PaymentID INT,CustomerID INT,Value INT,PaidOn DATE

我想针对每个客户的最高付款运行查询.这是否可以使用单个SQL查询,以避免挖掘我不感兴趣的每一行 - 或者更糟糕的是,为每个客户运行查询?

我到目前为止所提出的最好的是:

SELECT CustomerID,MAX(Value)FROM Payments GROUP BY CustomerID;

但这并没有给我找到的行的PaymentId或PaidOn值.

Ton*_*ews 10

select PaymentID, CustomerID, Value, PaidOn
from payments
where (customerID, value) in
( select customerID, max(value)
  from payments 
  group by customerID
);
Run Code Online (Sandbox Code Playgroud)

请注意,如果每个客户有多个具有最大值的付款,则每个客户可以返回多行.