访问SQL Distinct最大值

时间:2017-08-16 22:23:26

标签: sql ms-access

现在已经磕磕绊绊几个小时了。我在这里看过其他几篇文章但是找不到符合我需求的文章。有一个Access数据库,我试图删除可能的重复项,并获得唯一列表的最大值。我有一些需要数据的字段:

  

CustomerNumber EmpID SurveyResultID SurveyTotalScore SurveyQuestionCount

CustomerNumber有重复,但我只需要不同的值。如果有一个具有不同SurveyTotalScore的重复CustomerNumber,我需要MAX分数。

基本上我想返回一个具有最高SurveyTotalScore并且没有重复项的不同CustomerNumber的列表。什么是最好的方式?

更新的 这是我尝试过的一个查询。它可以工作,如果我只是离开CustomerNumber但我需要EmpID和其他一些领域。

SELECT CustomerNumber, Max(SurveyTotalScore) AS MaxScore, SurveyResultID
FROM CSATDetail
GROUP BY CustomerNumber, SurveyResultID;
  

示例数据:

+----------------+----------+----------------+-------+
| CustomerNumber | MaxScore | SurveyResultID | EmpID |
+----------------+----------+----------------+-------+
|            259 |       40 |         461500 |    83 |
|            259 |       38 |         461501 |    83 |
|            695 |       40 |         461502 |    59 |
|            695 |       40 |         461504 |    59 |
|            734 |       40 |         461503 |    96 |
+----------------+----------+----------------+-------+

我想出来的是这个。如果EmpID

有多个结果,它会选择maxscore并且没有重复项
+----------------+----------+----------------+-------+
| CustomerNumber | MaxScore | SurveyResultID | EmpID |
+----------------+----------+----------------+-------+
|            259 |       40 |         461500 |    83 |
|            695 |       40 |         461502 |    59 |
|            734 |       40 |         461503 |    96 |
+----------------+----------+----------------+-------+

1 个答案:

答案 0 :(得分:0)

你离我只有一步之遥。

  • 使用max total和customerID生成一个集合(看起来你不需要/想要surveyID)。 (检查,稍微调整一下)
  • 然后将其连接回基本集以获取所需的信息。这限制了那些只有最大总数的数据的结果,使您可以获得其他所需的信息。 (只需要这个!)

SELECT CD.CustomerNumber, MaxScore, min(SurveyResultID), EmpID 
FROM CSATDETAIL CD
INNER JOIN (SELECT CustomerNumber, Max(SurveyTotalScore) AS MaxScore
            FROM CSATDetail CI
            GROUP BY CustomerNumber) CD2
  on CD.CustomerNumber = CD2.customerNumber
 and CD.SurveyTotalScore = CD2.MaxScore
GROUP BY CD.CustomerNumber, MaxScore, EmpID 

并且因为它看起来你可以根据样本数据建立联系,你想要最小调查.....我们需要一个分组和分钟。

----在最后一次评论之后...现在基本上说了。

使用最早的surveyResultID返回具有最高分数的每个客户的employeeID。

SELECT CD.CustomerNumber, MaxScore, minSurveyResultID, EmpID 
FROM CSATDETAIL CD
INNER JOIN (SELECT CD3.CustomerNumber, CD2.MaxScore, Min(SurveyResultID) AS MinSurveyResultID
            FROM CSATDETAIL CD3
            INNER JOIN (SELECT CustomerNumber, Max(SurveyTotalScore) AS MaxScore
                        FROM CSATDetail CI
                        GROUP BY CustomerNumber) CD2
               ON CD2.CustomerNumber = Cd3.CustomerNumber
              and CD2.MaxScore = CD3.SurveyTotalScore
            GROUP BY CD3.CustomerNumber, CD2.MaxScore) CD4

  on CD.CustomerNumber = CD4.customerNumber
 and CD.SurveyTotalScore = CD4.MaxScore
 and CD.SurveyResultID = CD4.MinSurveyResultID