1

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

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 和日期。

到目前为止,我有这样的查询,它按 nbr 分组并选择 max(amt) 但它不会让我选择日期,因为它不在聚合函数中,但如果我把它放在聚合函数中,它会选择 max(date)这与 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'

因此,如果我将查询更改为我在哪里定义它以获取 max(amt),则结果至少不会显示最大值。

4

1 回答 1

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
于 2013-01-08T19:56:19.623 回答