繁体   English   中英

查询Microsoft Access中记录的最新版本

[英]Query for latest version of records in Microsoft Access

我在Microsoft Access中有一个从Sql Server视图中提取的查询。 有一个修订级别字段,其类型为char(2)。 因此,一个对象可以有多个修订版本,从“ 01”开始,然后是“ 02”,直到上一个。 我只想获取每个对象的最新修订记录。 有没有一种方法可以设置查询来执行此操作?

尝试类似

SELECT DataTable.ItemName, DataTable.Revision
FROM DataTable
WHERE (((DataTable.Revision)=(select max(revision) from DataTable T where T.ItemName=DataTable.ItemName)));

您无法使用SQL一步完成此操作。 相反,您需要首先为每个产品找到正确的修订,然后获取与那些产品/修订对匹配的记录:

要查找每个产品的修订,您需要按产品分组并找到相关性最高的修订:

SELECT Test.ProductID, Max(Test.Revision) AS MaxOfRevision
FROM Test
GROUP BY Test.ProductID;

仅现在,您可以转到原始数据集并获取与我们新发现的ProductID /修订版对匹配的每条记录:

SELECT Test.TestID, Test.ProductID, Test.Description
FROM Test 
INNER JOIN 
    subQ 
ON (Test.Revision = subQ.MaxOfRevision) AND (Test.ProductID = subQ.ProductID);

当然,您可以创建一个包含以下内容的查询:

SELECT Test.TestID, Test.ProductID, Test.Description
FROM Test 
INNER JOIN 
    (SELECT Test.ProductID, Max(Test.Revision) AS MaxOfRevision
     FROM Test
     GROUP BY Test.ProductID) AS subq
ON (Test.Revision = subQ.MaxOfRevision) AND (Test.ProductID = subQ.ProductID);

说明:

在列中找到最大值的唯一方法是使用Max()。 SELECT Max(Revision) FROM table; 给我们恰好一个值:所有记录中出现的最高revision DBEngine会查看找到的每个revision并采用最高的revision

如果我们要对每个产品进行最高修订,则需要按产品分组。 现在,DBEngine对每个ProductID遍历该表一次,查看它在相应记录中找到的每个revision ,采用最高的revision并将其与其产品组相关联。

这就是为什么第一个查询的结果记录不能包含所有所需数据的原因:它们不是原始记录的子集,它们是具有一个组标识符(ProductID)和一个revision值的新记录:最高的DBEngine可以找到的与该产品相关的所有revision值中的一个。

边注

只要您的修订中有前导零,就可以在此处使用Max(),因为顺便说一句,它的排序方式与数字相同。 在将来的应用程序中,您可能希望将该字段替换为数字字段,或者将其显式转换为数字,然后再将其用作数字(MAX,Sort ....)。

我发现以下子选择也适用。

SELECT  *
  FROM DataTable 
  INNER JOIN (  
    SELECT  JobNumber , 
        MAX(CAST(RevisionLevel AS INT)) AS MaxRevision 
    FROM    DataTable 
    GROUP BY JobNumber)x 
  ON x.JobNumber = DataTable.JobNumber AND CAST(DataTable.RevisionLevel AS INT) = x.MaxRevision

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM