2012-02-29 16 views
1

私はクイズを作成しています。プレイヤーからの応答をSQL Serverデータベースに保存しています。SQL Server - 複数の異なる値を返す

表:tblResponses

列:

rId (indexed primary key) 
    rQuestion (links to tblQuestions) 
    rResponse (the player's response, links to tblAnswers) 
    rTimeLeft (timestamp of when answer was added) 
    rPlayerId (uniqueidentifier, linked to tblPlayers) 

通常動作罰金(読み込み/書き込み)ですが、私は一つの特徴にクロッパーのおかげで報告システムを作り上げることだし、来ている:

プレイヤーは質問を再訪し、回答を変更することができます。これにより、「応答」テーブルに新しい行が作成されます。

レポート(この場合は特定の質問IDに基づいています)で最新の回答のみを選択する必要があります。したがって、あるプレーヤーが回答を変更した場合は、2つではなく1つのレコードを返します。

答えはおそらく驚くほど明白ですが、私はそれほど長い間それを見てきましたが、明らかに私の理解を超えています。

誰でも手助けできますか?

答えて

4

これを行う方法はたくさんあります。これは、分析機能を使用して1の例である:

SELECT * 
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY rQuestion, rPlayerId ORDER BY rId DESC) Corr 
     FROM tblResponses) A 
WHERE Corr = 1 

免責事項:あなたは、テーブルtblResponsesの増分IDを持っている場合は、この答えは動作します。

+0

すべての回答ありがとうございます!これは私のニーズに最も適しているようです。私は後でこのテクニックを覚えなければならないでしょう... – MassivePenguin

0

はこれを試してみてください:

SELECT rId, rQuestion, rResponse, rTimeLeft, rPlayerId 
FROM (SELECT rId, rQuestion, rResponse, rTimeLeft, rPlayerId, 
    ROW_NUMBER() OVER (PARTITION BY rPlayerId, rQuestion ORDER BY rId DESC) as RowNum 
    FROM tblResponses 
    ) AS T 
WHERE T.RowNum = 1 

私は、順次RID増加することを、ここで質問に対する高いRID手段より最近の答えを想定しています。

関連する問題