首页 > 解决方案 > 当两次尝试具有相同的值时,SQL JOIN 在多个用户尝试中选择 MAX 值返回两个值

问题描述

大家,早安!

我有一个非常简单的 SELECT/JOIN 语句,它从分班测试中获取一些导入的数据,并返回用户所做的最高得分尝试,即最好的分数。用户可以多次参加这个测试,所以我们只是使用最好的尝试。如果用户进行了多次尝试(例如,两次)并且两次都获得相同的分数怎么办?

我当前的查询最终返回了这两个记录,因为它们都是相等的,所以 MAX() 返回两者。目前还没有设置主键——我在下面使用的查询是我希望添加到另一个表的 INSERT 语句中的查询,一旦我只获得每个用户(StudentID)的一次最佳尝试,并设置它StudentID 作为键。所以你看到我的问题...

我在查询中尝试了一些 DISTINCT 或 TOP 语句,但要么我将它们放入查询的错误部分,要么它们仍然为尝试得分相同的用户返回两条记录。有什么建议么?

SELECT p.*
FROM
(SELECT 
    StudentID, MAX(PlacementResults) AS PlacementResults
    FROM AleksMathResults
    GROUP BY StudentID)
    AS mx
    JOIN AleksMathResults p ON mx.StudentID = p.StudentID AND mx.PlacementResults = p.PlacementResults
    ORDER BY
    StudentID

标签: sqlsql-server

解决方案


听起来像你想要的row_number()

SELECT amr.*
FROM (SELECT amr.*
             ROW_NUMBER() OVER (PARTITION BY StudentID ORDER BY PlacementResults DESC) as seqnum
      FROM AleksMathResults amr
     ) amr
WHERE seqnum = 1;

推荐阅读