我有一个看起来像这样的表(这只是一些记录,它们也是更多的列,但这些是我关心的):
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),结果不会显示至少最大值。
答案 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