如何在 Access 2016 中的另一列上选择具有最大值的不同行
Posted
技术标签:
【中文标题】如何在 Access 2016 中的另一列上选择具有最大值的不同行【英文标题】:How can I select distinct rows with max values on another column in Access 2016 【发布时间】:2019-12-15 13:31:16 【问题描述】:我使用 Access 2016 作为数据库工具,并希望能够从“数据表”中检索“条目”的最新“版本”。这些参数中的每一个(以及其他参数)都是 DataTable 中的单独列。当我将嵌套查询拆分为不同的查询时,它可以正常工作,但是一旦我用它们构建单个查询,它就不行了。 我发现这里提出的类似问题解决了同样的问题,但我猜这些问题没有使用 Access 2016。在我的情况下,实施建议的答案不起作用。或者我犯了错误,没有意识到。所以这里是问题的事实。
数据表:
期望的最终结果:
我使用下面的 SQL 表达式 (qry1) 来过滤最高版本的条目
SELECT DataTable.[Entry] AS EntrySorted, max(DataTable.[Version]) AS MaxVersion
FROM DataTable
GROUP BY DataTable.[Entry];
当我构建一个使用第一个查询的单独查询 (qry2) 时,它按预期工作
SELECT DataTable.[Entry], DataTable.[Summary]
FROM DataTable
INNER JOIN qry1
ON (DataTable.[Entry] = qry1.EntrySorted) AND (DataTable.Version = qry1.MaxVersion);
现在的问题是:一旦我将这两个查询结合起来,它就不起作用了。
SELECT DataTable.[Entry], DataTable.[Summary]
FROM DataTable
INNER JOIN
(
SELECT DataTable.[Entry] AS EntrySorted, max(DataTable.[Version]) AS MaxVersion
FROM DataTable
GROUP BY DataTable.[Entry]
)
ON (DataTable.[Entry] = EntrySorted) AND (DataTable.Version = MaxVersion);
如果有人也能解释我的方法中的错误,我将不胜感激。
非常感谢。
【问题讨论】:
【参考方案1】:您可以使用相关子查询:
select dt.*
from datatable as dt
where dt.version = (select max(dt.version)
from datatable as dt2
where dt2.entry = dt.entry
);
不需要额外的表格或视图。
【讨论】:
以上是关于如何在 Access 2016 中的另一列上选择具有最大值的不同行的主要内容,如果未能解决你的问题,请参考以下文章