次のようなテーブルがあります。
Date | AttributeId | Score |
4/4/2013 1 0.64
4/6/2013 2 0.35
4/6/2013 1 0.86
4/4/2013 5 0.34
4/4/2013 4 0.23
4/7/2013 3 0.54
4/8/2013 1 0.66
特定の AttributeID の最後のオカレンスのみを取得するように、MS SQL でクエリを作成できますか? 上記の例から、クエリは次を返します。
Date | AttributeId | Score |
4/6/2013 2 0.35
4/4/2013 5 0.34
4/4/2013 4 0.23
4/7/2013 3 0.54
4/8/2013 1 0.66
役立つ場合は、AttributeID が 5 つ (1 ~ 5) しかなく、変更されないことがわかっています。
今のところ、最後の 15 レコードをクエリして (これらのレコードに 5 つの属性がすべて含まれていることを期待しています)、アプリケーション レベルで 5 つの属性すべての最新スコアを抽出しています。
より良い解決策はありますか?
編集:
また、Date
、UserId
、AttributeId
およびがある場合Score
、結果を でグループ化できUserId
ますか?
あなたの回答を試してみたところ、最新の結果しか得られないことがわかりましたUserId
。
ごめんね、UserId
もっと早く言う べきだった
編集 2: すべてのユーザーの属性ごとに最新のスコアを取得し、属性全体のスコアを平均する必要があります。サンプルは次のようになります。
Date | UserId | AttributeId | Score |
4/4/2013 1 1 0.64
4/6/2013 1 1 0.35
4/6/2013 2 1 0.86
4/4/2013 1 3 0.34
4/4/2013 2 3 0.23
4/7/2013 2 1 0.54
4/8/2013 1 5 0.69
4/4/2013 2 4 0.27
4/7/2013 2 2 0.54
4/9/2013 1 4 0.66
4/9/2013 2 2 0.58
4/10/2013 1 4 0.66
4/9/2013 1 2 0.33
4/11/2013 2 5 0.10
最初の結果は次のようになります。
Date | UserId | AttributeId | Score |
4/6/2013 1 1 0.64
4/9/2013 1 2 0.33
4/4/2013 1 3 0.34
4/10/2013 1 4 0.66
4/8/2013 1 5 0.69
4/7/2013 2 1 0.86
4/9/2013 2 2 0.58
4/4/2013 2 3 0.23
4/4/2013 2 4 0.27
4/11/2013 2 5 0.10
でスコアを平均した後の最後の結果UserId
:
UserId | AverageScore |
1 0.532
2 0.408