访问SQL Distinct最大值

访问SQL Distinct最大值,sql,ms-access,Sql,Ms Access,几个小时来我一直在为这件事感到困惑。我在这里看过其他几篇文章,但找不到一篇适合我需要的。有一个Access数据库,我试图在其中删除可能的重复项,并获取唯一列表的最大值。我有几个字段包含所需的数据: 客户编号EmpID Survey最终调查TotalScore Survey问题计数 CustomerNumber有重复项,但我只需要不同的值。如果存在具有不同SurveyTotalScore的重复CustomerNumber,我需要最大分数 本质上,我希望返回一个具有最高SurveyTotalScor

几个小时来我一直在为这件事感到困惑。我在这里看过其他几篇文章,但找不到一篇适合我需要的。有一个Access数据库,我试图在其中删除可能的重复项,并获取唯一列表的最大值。我有几个字段包含所需的数据:

客户编号EmpID Survey最终调查TotalScore Survey问题计数

CustomerNumber有重复项,但我只需要不同的值。如果存在具有不同SurveyTotalScore的重复CustomerNumber,我需要最大分数

本质上,我希望返回一个具有最高SurveyTotalScore且无重复项的独特CustomerNumber列表。最好的办法是什么

更新: 这是我试过的一个问题。如果我只保留CustomerNumber本身,它就可以工作,但我需要EmpID和一些其他字段

SELECT CustomerNumber, Max(SurveyTotalScore) AS MaxScore, SurveyResultID
FROM CSATDetail
GROUP BY CustomerNumber, SurveyResultID;
示例数据:

我想说的是这个。它选择maxscore,如果EmpID有多个结果,则不会有重复项

+----------------+----------+----------------+-------+
| CustomerNumber | MaxScore | SurveyResultID | EmpID |
+----------------+----------+----------------+-------+
|            259 |       40 |         461500 |    83 |
|            695 |       40 |         461502 |    59 |
|            734 |       40 |         461503 |    96 |
+----------------+----------+----------------+-------+
你只差一步了

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

而且,因为它看起来你可以根据样本数据建立联系,你需要min调查。。。。。我们需要一个小组

----在最后的评论之后。。。现在基本上是这样说的

返回每个得分最高的客户最早的调查结果的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
你只差一步了

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

而且,因为它看起来你可以根据样本数据建立联系,你需要min调查。。。。。我们需要一个小组

----在最后的评论之后。。。现在基本上是这样说的

返回每个得分最高的客户最早的调查结果的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


您必须确定使记录重复的列。然后,您必须选择应选择哪些值,而不是其他值。您必须制定重复数据消除规则。只有一列不能有重复值,即SurveyResultID。我可以得到一个不同的CustomerNumber列表,但如果有重复的,我还需要max SurveyTotalScore。请,请,请,请向我们展示您的SQL尝试和示例数据。你真的确定他们是重复的还是仅仅是为同一个/不同的员工填写了多个调查的客户,因此他们的联接将重复值?你的表的模式是什么?我所说的叙述正确吗?客户是否与调查表共享一对多?每当您加入这种类型的关系时,客户都会重复每次不同的调查。这些不是重复的。我遗漏了什么?听起来像是一个群体<代码>按CustomerNumber从tablename组中选择CustomerNumber,Max(SurveyTotalScore)作为MaxScore。否则,构建报告并将其排序和分组功能用于聚合计算。报表允许显示详细数据和摘要计算。您必须确定使记录重复的列。然后,您必须选择应选择哪些值,而不是其他值。您必须制定重复数据消除规则。只有一列不能有重复值,即SurveyResultID。我可以得到一个不同的CustomerNumber列表,但如果有重复的,我还需要max SurveyTotalScore。请,请,请,请向我们展示您的SQL尝试和示例数据。你真的确定他们是重复的还是仅仅是为同一个/不同的员工填写了多个调查的客户,因此他们的联接将重复值?你的表的模式是什么?我所说的叙述正确吗?客户是否与调查表共享一对多?每当您加入这种类型的关系时,客户都会重复每次不同的调查。这些不是重复的。我遗漏了什么?听起来像是一个群体<代码>按CustomerNumber从tablename组中选择CustomerNumber,Max(SurveyTotalScore)作为MaxScore。否则,构建报告并将其排序和分组功能用于聚合计算。报表允许显示详细数据和摘要计算。使用此报表时,我仍然可以获得所有结果。只是修改为在阅读评论和查看“关闭”后将surveyID从内部“选择并连接”中排除,您不需要它。那么@camaroracer016现在呢P但是,如果一个客户不止一次拥有相同的分数,则会返回每个客户具有最高分数的所有此类记录。另外,将*更改为所需字段。真的不应该使用*除了在exists或代码中的其他一些地方。这看起来像是在有不同分数的地方删除了重复项太棒了!现在-如果重复项具有相同的分数,我该如何删除它们?完成:当存在这样一个示例时,P看起来像是您想要min surveyResultID。只需要添加一个min和一个groupby并指定*字段:PI感觉我们太接近了!但是,我得到了一个错误:“指定的字段‘CustomerNumber’可能引用SQL语句FROM子句中列出的多个表。”使用此字段时,我仍然会得到所有结果。在阅读注释并仔细查看后,仅修改为从内部select和join中排除surveyID,您不希望这样做。那么@camaroracer016现在呢P但是,如果客户多次获得相同分数,则所有
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