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

时间:2016-10-27 18:23:52

标签: ms-access

我在Microsoft Access中有一个从Sql Server视图中提取的查询。有一个修订级别字段,它是char(2)类型。因此,一个对象可以有多个修订,从" 01"开始,然后" 02",然后再开始。我想获得每个对象的最新修订记录。有没有办法设置查询来执行此操作?

3 个答案:

答案 0 :(得分:1)

尝试类似

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

答案 1 :(得分:0)

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

要查找每种产品的修订版,您希望按产品分组并找到最高相关版本:

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

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

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并获取最高的值。

如果我们想要对每个产品进行最高版本修订,我们需要按产品分组。现在,DBEngine会针对每个ProductID遍历表格,查看它在相应记录中找到的每个revision,获取最高的一个并将其与其产品组相关联。

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

旁注

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

答案 2 :(得分:0)

我发现以下子选择也有效。

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