SQL Server - 返回多个不同的值

时间:2012-02-29 12:40:18

标签: sql database sql-server-2008

我正在创建一个测验,我正在存储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),所以如果一个玩家在某个时候更改了他们的答案,我只想返回一个而不是两个。< / p>

答案可能非常明显,但我已经看了很长时间了,显而易见是我无法理解的。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

有很多方法可以做到这一点。这是一个使用分析函数的例子:

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

免责声明:如果您在表tblResponses上有增量ID,则此答案有效。

答案 1 :(得分: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意味着更近期对问题的回答。