2017-05-15 8 views
2

私は使用中のすべてのアカウントから値を取得しようとしていますが、2つの列(年と月)を組み合わせて適切な期間を取得します。2つの結合された列の最大値を取得する

このデータテーブルは次のようになります。

アカウント;年;月;値
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 

を得るカント2017 "の場合、結果は得られますが、各accoutのヒット数は複数あります。私はそれぞれのアカウントに対して1つの結果しか望んでいません。

募集結果:
アカウント;年;月;値
1000; 2016; 1; 11111
2000; 2014; 12; 22222
3000; 2015年; 1; 33333
4000; 2016; 1; 44444

どうすれば実現できますか?

+1

サンプルデータと予想される結果を提供してください。また、サンプルデータを提供するためにイメージを使用しないで、コピー/ペーストすることも可能です。 – GuidoG

+0

サンプルテーブルのデータと期待される結果を書式付きテキストで追加することを検討してください。 現在のクエリの試行も表示 – TheGameiswar

+0

サンプルデータを追加しようとします。このページの入力システムには使用されていません。 –

答えて

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

+0

これは私が探している結果です!ありがとうございました!私は "絆で"勉強する必要があります。 –

+0

@HaraldBang幸せに助けてください – TriV

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 
+0

これは、Year 2015 Month 1 ant年2016 Month 1のアカウント1000に対しても重複した回答を返します。 –

関連する問題