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