SQL Server select与聚合函数
我有一个表,看起来像这样这只是一些记录,它们也有更多的列,但这些是我关心的:SQL Server select与聚合函数,sql,sql-server,select,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 8
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选择对应于最大金额的nbr、金额和日期
到目前为止,我有这样一个查询,它按nbr对其进行分组并选择maxamt,但它不允许我选择日期,因为它不在聚合函数中,但如果我将它放在聚合函数中,它会选择maxdate,而maxdate与金额随附的实际日期不对应:
,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'
因此,如果我将查询更改为此处,我在何处定义它以获取最大值,则结果至少不会显示最大值。尝试使用排名函数:
with TopAmt as
(
select *
, amtRank = row_number() over (partition by nbr order by amt desc)
)
select nbr
, amt
, date
from TopAmt
where amtRank = 1
尝试使用排名函数:
with TopAmt as
(
select *
, amtRank = row_number() over (partition by nbr order by amt desc)
)
select nbr
, amt
, date
from TopAmt
where amtRank = 1
+1,这将始终检索一条记录。如果有多条记录的每个nbr的最大金额相同,则op可以使用秩而不是行数。我不知道这是否是问题所在,但我正在查看的表有3列以上,这些正是我关心的。我得到一个错误:多次为指定了nbrtopamt@Lamak提出了一个很好的观点;如果您担心出现平局,您可以在over条款中包含日期,例如按nbr订单按amt desc划分,date将返回第一次出现的最大金额。是的,我有行\号超额分配。。。before and yes它检索一条记录,但没有选择最大值。请查看我为u建议的+1编辑的上面的问题/查询,这将始终检索一条记录。如果有多条记录的每个nbr的最大金额相同,则op可以使用秩而不是行数。我不知道这是否是问题所在,但我正在查看的表有3列以上,这些正是我关心的。我得到一个错误:多次为指定了nbrtopamt@Lamak提出了一个很好的观点;如果您担心出现平局,您可以在over条款中包含日期,例如按nbr订单按amt desc划分,date将返回第一次出现的最大金额。是的,我有行\号超额分配。。。before and yes可检索一条记录,但未选择最大值。请查看我编辑的上述问题/查询,了解我认为你的建议如果你有两天发生的相同最大值,您是想要第一次达到该金额还是最近达到该金额的时间?如果您在两个不同的日期拥有相同的最大金额,则无论哪一个更容易实现都无所谓,您是希望第一次达到该金额还是最近一次达到该金额?无论哪一次更容易实现都无所谓