代码之家  ›  专栏  ›  技术社区  ›  Krishna Kumar

如何在其中一列具有相同值的行中查询列值最高的行

  •  4
  • Krishna Kumar  · 技术社区  · 14 年前

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

    Id    userId   Score
    3       1       5
    2       2       5
    

    也就是说,我想选取由属于最高“id”列值的“user id”唯一的行。

    4 回复  |  直到 14 年前
        1
  •  3
  •   Niikola    14 年前

    在SQL Server 2000上工作的另一个解决方案(与上面的内部联接相同,但速度稍快)是:

    SELECT id, userId, Score
      FROM UserScores
     WHERE id in (SELECT MAX(id)
                    FROM UserScores
                   GROUP BY userId
                 ) 
     ORDER BY userId
    
        2
  •  2
  •   OMG Ponies    14 年前

    用途:

    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
    
        3
  •  2
  •   Marc B    14 年前

    怎么样

    SELECT MAX(Id), userId, Score
    FROM table
    GROUP BY UserId
    
        4
  •  1
  •   Mafu Josh    14 年前
    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