显示与使用Access查询MIN()函数

时间:2016-02-23 15:20:45

标签: sql ms-access group-by min jet

我使用以下查询:

 SELECT [ActionItems].AutoID, Min([ActionItems].[Action Status]) AS [MinOfAction Status]
 FROM [ActionItems]
 GROUP BY [ActionItems].AutoID;

我为字段[Action Status]设置了自定义排序,此查询称为"最紧急行动项目"对于任何给定的AutoID,应该检索那个排名最高的那个(AutoID与主表([Students]中的相同);如果有意义的话,这个[ActionItems]表是次要的

嗯,它有效。但是[AutoID]字段本身没有帮助 - 只将它与主表中的记录匹配。我还需要为表中的每个记录显示表[ID]中的唯一[ActionItems],因为[Action Status]不是唯一的(只有三个可能的值)。我尝试使用" Group By"添加[ID]字段。或"表达"甚至" MAX"但没有人返回所需的结果:

  • " Group By"然后显示任何给定[AutoID]的所有记录,即 没用。
  • "表达"返回错误
      

    您的查询不包含指定的表达式' ID'作为集合函数的一部分。

  • &#34; MAX&#34;然后,每[AutoID]只显示一条记录(根据需要!),但[ID]不一定与正确的[Action Status]匹配,因此它也没有帮助。< / LI>

如果可能的话,我更愿意展示的不仅仅是[ID]字段,但我认为这至少足以将此查询用作其他更广泛查询的帮助程序。

我怀疑子查询可能有用,但这是非常陌生的领域...我确实在这里找到了一些其他类似的问题,但我找不到任何以我能理解的方式解释答案的内容。

我希望一切都有道理;非常感谢任何帮助。

编辑:经过一些搜索后,我发现这与此问题几乎相同:MS Access SQL: Aggregating on Min Value but retrieving other fields

我会继续尝试提出一个解决方案,如果我这样做的话会在这里发布,但是如果社区认为这应该被关闭,我理解这一点。

1 个答案:

答案 0 :(得分:0)

以下是我用来获得所需结果的代码:

SELECT T.AutoID, T.[Most Urgent Action Status], A.[ID]
FROM
    (
    SELECT AutoID, Min([Action Status]) as [Most Urgent Action Status]
    from [ActionItems]
    GROUP BY AutoID
    ) as T
INNER JOIN [ActionItems] A ON T.AutoID = A.[AutoID] AND T.[Most Urgent Action Status] = A.[Action Status]

我不知道用正确的术语来描述这里发生了什么,但它让我觉得我只是加入常规查询到子查询,子查询基本上是我在我的问题中提到的那个。

在确认显示我想要的内容之后,我在[ActionItems][AutoID]字段中进行了第二次查询,将[ID]表加入此查询;我还在连接中添加了一些其他传记信息,以获得更多上下文。

再一次,这基本上是这个问题答案的修改版本:MS Access SQL: Aggregating on Min Value but retrieving other fields

现在,我了解它的工作原理,看起来非常直观。我希望这有助于其他人!