我试图从所有正在使用的帐户中获取值,使用两列(年和月)的组合来获得正确的时间段。
数据表看起来像这样:
帐户;年;月;值
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个
我试图提出疑问,但不知何故,我无法到达那里......
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个
我怎样才能实现这一目标?在此先感谢:)
答案 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 TIES
和ROW_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)