2012-02-29 119 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),所以如果一個玩家在某些時候改變了他們的答案,我只想返回一個記錄而不是兩個。

答案可能非常明顯,但我一直在尋找這麼久,明顯是超出我的把握。

任何人都可以幫忙嗎?

回答

4

有很多方法可以做到這一點。這是使用分析功能的示例:

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 2012-02-29 12:56:04

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 

我這裏假設擺脫連續增加,更高的手段擺脫最近的問題的答案。