2010-08-11 4 views
4

나는 UserScores 표는 다음과 같이 데이터를 가지고 :열 중 하나의 값이 동일한 행 중 가장 높은 열 값이 행을 조회하는 방법

Id userId Score 
1  1  10 
2  2  5 
3  1  5 

내가 쿼리 또는 SQL 블록을 가지고 싶습니다 그것은 나에게, 내가 최고 '아이디'열 값에 속하는 '사용자 ID'에 의해 고유 행을 선택하고자하는 것입니다 다음과 같은 출력

Id userId Score 
3  1  5 
2  2  5 

을 제공 할 수 있습니다.

답변

3

SQL 서버에서 작동 할 또 다른 해결책을 2000 (INNER은 약간 빠른 위의 가입 만과 동일)입니다 :

SELECT id, userId, Score 
    FROM UserScores 
WHERE id in (SELECT MAX(id) 
       FROM UserScores 
       GROUP BY userId 
      ) 
ORDER BY userId 
2

사용 :

WITH summary AS (
    SELECT t.id, 
       t.userid, 
       t.score, 
       ROW_NUMBER() OVER (PARTITION BY t.userid ORDER BY t.id DESC, t.score DESC) AS rank 
     FROM USERSCORES sc) 
SELECT s.id, 
      s.userid, 
      s.score 
    FROM summary s 
WHERE s.rank = 1 
2

방법에 대한

SELECT MAX(Id), userId, Score 
FROM table 
GROUP BY UserId 
+0

오류 - '점수'가 그룹에 없거나 집계 내에 없습니다. 또한'id'와'score' 값이 연결되는 것을 보장하지 않습니다. –

1
SELECT U2.id, U2.userId, U2.score 
FROM UserScores U2 
INNER JOIN (
    SELECT U1.userId, MAX(U1.Id) MaxId 
    FROM UserScores U1 
    GROUP BY U1.userId 
) U3 
ON U2.id = U3.MaxId and U2.userId = U3.userId 
ORDER BY U2.userId 
관련 문제