2012-02-29 4 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 개가 아닌 하나의 레코드 만 반환하려고합니다.

대답은 아마도 눈부시게 분명하지만 나는 오랫동안 그것을보고있었습니다. 명백한 것은 내 이해를 넘어서는 것입니다.

아무도 도와 줄 수 있습니까?

답변

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

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 증가가 순차적으로 높은 제거 수단 최근의 대답이.