我在MS Access 2016中跟踪我的驾驶习惯。我有一张名为Miles
的表:
在我的Miles
表中,我正在记录每个驱动器末尾的汽车仪表板上的信息。
我还有一个名为Fuel
的第二个表(实际上是一个查询):
我的Fuel
查询显示我何时购买了燃料以及购买了多少燃料。
我想创建一个查询,显示最小Transaction_Date
小于或等于每个Miles_Date
的查询。我的预期输出看起来像这样:
我尝试了以下Select
声明:
SELECT
Miles.Miles_ID,
DMax("[Transaction_Date]", "Fuel", "[Fuel]![Transaction_Date] <= [Miles]![Miles_Date]") AS Fuel_Date,
Miles.Miles_Date, Miles.Miles, Miles.MPG
FROM
Miles;
我收到错误:
Microsoft Access找不到名称[Miles]![Miles_Date]
答案 0 :(得分:2)
使用域聚合时,需要使用字符串连接来传递当前行的值,如下所示:
SELECT
Miles.Miles_ID,
DMax("[Transaction_Date]", "Fuel", "[Fuel].[Transaction_Date] <= #" & Format(Miles.Miles_Date, "yyyy-mm-dd") & "#") AS Fuel_Date,
Miles.Miles_Date, Miles.Miles, Miles.MPG
FROM
Miles;
但是,在查询中使用域聚合是一种不好的做法,因为它限制了优化程序的影响。如果可能,请使用子查询:
SELECT
Miles.Miles_ID,
(SELECT Max([Transaction_Date]) FROM Fuel WHERE [Fuel].[Transaction_Date] <= Miles.Miles_Date) AS Fuel_Date,
Miles.Miles_Date, Miles.Miles, Miles.MPG
FROM
Miles;
这将运行得更快,而不依赖于字符串连接。