从两个组合列中获取最大值

时间:2017-05-15 15:29:37

标签: sql-server

我试图从所有正在使用的帐户中获取值,使用两列(年和月)的组合来获得正确的时间段。

数据表看起来像这样:

帐户;年;月;值
1000; 2015年; 1; 11501个
1000; 2016年1; 11111个
1000; 2016年10; 11610个
1000; 2017年; 1; 11701个
2000; 2014; 12; 22222个
2000; 2017年; 1; 21701个
3000; 2015年; 1; 33333个
4000; 2016年1; 44444个

表:AcBal enter image description here

我试图提出疑问,但不知何故,我无法到达那里......

Select Account, 
       Year, 
       Month, 
       MAX(((Year*100)+Month)) AS YearPeriod, 
       Value 
from  AcBal 
where YearPeriod <= 201601 
group by Account, Year, Month, Value 
order by Account, Year

如果我使用&#34;年份&lt; = 2017&#34;,那么我会得到一个结果,但是每个accout都有多次点击。我只想为每个帐户提供一个结果。

通缉结果:
帐户;年;月;值
 1000; 2016年1; 11111个
 2000; 2014; 12; 22222个
 3000; 2015年; 1; 33333个
 4000; 2016年1; 44444个

我怎样才能实现这一目标?在此先感谢:)

2 个答案:

答案 0 :(得分:0)

使用HAVING:

Select Account, Year, Month,  MAX(((Year*100)+Month)) AS YearPeriod , Value 
from AcBal 
group by Account, Year, Month, Value 
Having MAX(((Year*100)+Month)) <=201601 
order by Account, Year

答案 1 :(得分:0)

您可以使用TOP (1) WITH TIESROW_NUMBER() OVER(),例如以下查询

Select TOP (1) WITH TIES
        Account, [Year], [Month],  [Year]*100+[Month] AS YearPeriod , Value 
from AcBal 
where [Year]*100+[Month] <=201601   
ORDER BY ROW_NUMBER() OVER(PARTITION BY Account ORDER BY [Year]*100 +[Month] DESC)  

演示链接:http://rextester.com/DUPJ25770