如何从 sql table 获取最大值 id

How to get the max value id from sql table

我需要从下面获取每个帐户的最大(金额)值 table

ID   Account   Amount
1     rx00      100
2     rx00      200
3     rx00      100
4     vxtt       50
5     vxtt       70
6     vxtt       80

我需要一个结果 table 作为

ID   Account   Amount
2     rx00      200
6     vxtt       80

以上结果请指教

您可以为此使用 ROW_NUMBER

SELECT ID, Account, Amount
FROM (
  SELECT ID, Account, Amount,
         ROW_NUMBER() OVER (PARTITION BY Account 
                            ORDER BY Amount DESC) AS rn
  FROM mytable) AS t
WHERE t.rn = 1 

如果您有联系,即多个记录共享相同的最大 Amount 值并且您想要 return 所有这些记录,则使用 RANK 而不是 ROW_NUMBER.

;With cte
as
(
select id,account,amount
,row_number () over (partition by account order by amount desc) as rn
from
table
)
select * from cte where rn=1

在上面的代码中,一个唯一的 RowNumber 被分配给每个按账户和金额划分的值(值按金额降序排列)。因为我们不能直接select Row_number 或 clause.I 使用虚拟 table

的任何计算值

您可以使用 row_number 来获得想要的结果。

    DECLARE @table TABLE 
    (ID int, Account varchar(10),Amount int)

    INSERT INTO @table
    (ID,Account,Amount)
    VALUES
    (1,'rx00',100),
    (2,'rx00',200),
    (3,'rx00',100),
    (4,'vxtt',50),
    (5,'vxtt',70),
    (6,'vxtt',80)

   SELECT ID, Account, Amount
    FROM (
      SELECT ID, Account, Amount,
             ROW_NUMBER() OVER (PARTITION BY Account 
                                ORDER BY Amount DESC) AS rnk
      FROM @table) AS t
    WHERE t.rnk = 1 

这将是输出:

ID  Account Amount
2   rx00    200
6   vxtt    80

如果您不需要结果集中的 ID 列,您可以使用下面的查询。

    SELECT Account,max(Amount)  AS Amount FROM @table t
    GROUP BY Account

这将是输出:

Account Amount 
rx00    200
vxtt    80