SQL Server选择具有聚合函数

时间:2013-01-08 19:49:32

标签: sql sql-server select

我有一个看起来像这样的表(这只是一些记录,它们也是更多的列,但这些是我关心的):

nbr    amt     date     
1      10      10/30/2012
1      15      1/30/2012
1      50      11/30/2012
2      10      4/30/2012
2      1000    5/30/2012
2      45      1/15/2012
4      90      12/30/2012
4      89      8/30/2012
3      100     7/30/2012

我正在尝试使用SQL Server 2012选择与每个nbr的max(amt)对应的nbr,amt和date。

到目前为止我有这样的查询,它将它按nbr分组并选择max(amt)但它不会让我选择日期,因为它不在聚合函数中但如果我把它放在聚合函数中它选择最大值(日期),它不会与amt的实际日期相对应:

,topamt as (
select 
                 nbr
    ,amt
    ,date
,amtrank = row_number() over (partition by ah.member_nbr order by ah.tran_amt desc)

from HISTORY ah 
      amt>=10
and id=6061
and date between '11-01-2012' and '12-31-2012'

所以,如果我将查询更改为此处,我将其定义为获取最大值(amt),结果不会显示至少最大值。

1 个答案:

答案 0 :(得分:4)

尝试使用排名功能:

with TopAmt as
(
  select *
  , amtRank = row_number() over (partition by nbr order by amt desc)
)
select nbr
  , amt
  , date
from TopAmt
where amtRank = 1