2012-02-29 93 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 

我这里假设摆脱连续增加,更高的手段摆脱最近的问题的答案。