Sql MS Access query,如何创建仅显示文件更改位置的最近日期的文件清单查询

Sql MS Access query,如何创建仅显示文件更改位置的最近日期的文件清单查询,sql,ms-access,Sql,Ms Access,我正在尝试使用MS Access创建文件数据库。这些文件可以向员工收费以供审核 我有一个库存表、一个员工表和一个“冲销”表,其中包括一个文件、冲销对象和发生日期 我的目标是创建一个查询,显示文件库存及其详细信息,以及文件当前所在的位置(例如,与员工一起或在存储中) 我有一个名为“最新变更”的查询: SELECT Inventory.File_Number, Inventory.Last_Name, Inventory.First_Name, Max([Charg

我正在尝试使用MS Access创建文件数据库。这些文件可以向员工收费以供审核

我有一个库存表、一个员工表和一个“冲销”表,其中包括一个文件、冲销对象和发生日期

我的目标是创建一个查询,显示文件库存及其详细信息,以及文件当前所在的位置(例如,与员工一起或在存储中)

我有一个名为“最新变更”的查询:

        SELECT Inventory.File_Number, Inventory.Last_Name, Inventory.First_Name, 
        Max([Charge_In/Out].Date_Changed) AS Current_Location_Date
        FROM Inventory INNER JOIN [Charge_In/Out] ON Inventory.HRMIS = [Charge_In/Out].File_HRMIS
        GROUP BY Inventory.File_Number, Inventory.Last_Name, Inventory.First_Name;
这将返回文件中的信息以及费用表中的最近日期

我需要的是这个表,清单中的每个文件只显示一次,带有最新日期,但我还需要与最新日期关联的位置。将位置添加到此查询会从库存中创建我无法拥有的重复项

我创建了另一个我认为更完整的查询:

    SELECT Inventory.File_Number, Inventory.Last_Name, Inventory.First_Name, [Charge_In/Out].Date_Changed AS 
    Current_Location_Date, Location.Location_Name
    FROM Location INNER JOIN (Inventory INNER JOIN [Charge_In/Out] ON Inventory.File_Number = 
    [Charge_In/Out].File_Number) ON Location.Location_Name = [Charge_In/Out].Charge_Out_Location
    WHERE Current_Location_Date =
            (SELECT MAX(Date_Changed)
            FROM [Charge_In/Out]);
这会提示access询问当前位置日期的参数值,该参数值不应为当前位置日期,而应为库存中每个条目的最长日期

作为参考,这是收费表的外观:

     LogNumber | File_Number | Charge_Out_Location | Date_Changed
        1            xxx1             Storage         2019-01-01
        2            xxx1             Analyst         2020-05-01
        3            xxx1             Storage         2020-10-02
        4            xxx2             Storage         2019-01-01
我需要的结果表如下所示:

    File_Number | Last_Name | First_Name | Current_Location | Current_Location_Date
       xxx1         SMITH        John          Storage             2020-10-02
       xxx2         SMITH        Jane          Storage             2019-01-01

尝试像虚拟表一样使用第一个结果集

SELECT Inventory.File_Number, Inventory.Last_Name, Inventory.First_Name, 
   MaxInventory.Current_Location_Date, Charge.Charge_Out_Location
FROM Inventory
   INNER JOIN (
       SELECT Inventory.File_Number, Max([Charge_In/Out].Date_Changed) AS Current_Location_Date
       FROM Inventory INNER JOIN [Charge_In/Out] ON Inventory.HRMIS = [Charge_In/Out].File_HRMIS
       GROUP BY Inventory.File_Number
    ) AS MaxInventory ON Inventory.File_Number = MaxInventory.File_Number
    INNER JOIN [Charge_In/Out] AS Charge ON Inventory.HRMIS = Charge.File_HRMIS 
          AND Charge.Date_Changed = MaxInventory.Current_Location_Date
其概念是将摘要作为虚拟表(即“查询”)获取。它有最少的信息,所以很容易加入,并且没有重复的行。给它一个别名
MaxInventory
。然后将其余信息加入已最小化/汇总的
MaxInventory

您也可以在MS Access中创建一个新的“查询”来做同样的事情,而且它更持久,而不是像我那样以内联方式创建它

当您在同一日期有多个签入,并且您只需要最新的每个文件时,查询将发生更改:

SELECT Inventory.File_Number, Inventory.Last_Name, Inventory.First_Name, 
   Charge.Date_Changed AS Current_Location_Date, Charge.Charge_Out_Location
FROM (
       SELECT Inventory.File_Number, Max([Charge_In/Out].LogNumber) AS MaxLogNumber
       FROM Inventory INNER JOIN [Charge_In/Out] ON Inventory.HRMIS = [Charge_In/Out].File_HRMIS
       GROUP BY Inventory.File_Number
    ) AS MaxCharge 
    INNER JOIN [Charge_In/Out] AS Charge ON MaxCharge.MaxLogNumber = Charge.LogNumber
    INNER JOIN Inventory ON Inventory.File_Number = MaxCharge.File_Number
      AND Inventory.HRMIS = Charge.File_HRMIS 

在此解决方案中,我将把位置表的联接放在何处?我将MaxInventory创建为一个单独的查询,然后按照您的建议使用查询的其余部分。Access然后请求Location.Location\u NameOh的参数值。抢手货我没有把它联系起来。我将更改我的答案。使用此选项会导致我以前遇到的类似问题。除了同一个文件有多个条目外,所有内容都正常工作。以我上面提供的表为例,文件号xxx1有三个条目,一个位置是存储,然后是分析,然后是存储,所有条目的最新日期均为2020/10/02。有没有办法使每个文件只有一个条目?啊,是的。我还需要链接日期。当然,如果同一日期有多个条目,那么还有更多的事情要做。这是一种可能的情况吗?[Charge_in/out]表中是否有主键(自动编号)列?是否按顺序编号(最高=最新)