我正在创建一个测验,我正在存储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>
答案可能非常明显,但我已经看了很长时间了,显而易见是我无法理解的。
有人可以帮忙吗?
答案 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意味着更近期对问题的回答。