我目前正在尝试从Access 2007查询中的相关表中返回单个值,该查询以一对多关系连接到主表。出于格式化原因,我想避免使用子报表。
用例很简单:主报告列出了指标;每个指标都可以有很多测量值。我想根据测量日期仅列出表中最新的测量值。
在访问查询构建器中,我可以愉快地将测量结果添加到查询中;我目前只用两个单独的列(一个用于测量值,另一个用于测量日期)来确定如何执行此操作。我想要做的是获取测量值列表,按日期排序,以便我可以获得每个指标的最新测量值;遗憾的是,查询构建器不允许我这样做,因为它只提供了按列本身排序的选项,而不是另一列。
如何在查询构建器中根据日期列获取最新的度量值(接受重复日期会有一些奇怪的行为,我将根据其他地方的规则处理)?
我的表结构是:
DFS_Metric
-------------
ID
DFS_ID
Metric_ID
Metric
-------------
ID
Description
Unit
Metric_Value_Measurement
-------------
ID
Metric_ID
Measurement_Date
Measurement_Value
编辑:基于下面的评论,我写了以下SQL,这似乎给了我一个语法错误 - 我会感谢任何帮助我出错的地方:
SELECT Desired_Future_State_Metric.Desired_Future_State_ID
,Desired_Future_State_Metric.Metric_ID
,Desired_Future_State_Metric.Target_Value
,Desired_Future_State_Metric.Target_Date
,Metric.Description
,Metric.Unit
,Metric_Value_Measurement.Measurement_Date
FROM (
(
Metric INNER JOIN Desired_Future_State_Metric
ON Metric.ID = Desired_Future_State_Metric.Metric_ID
) INNER JOIN Metric_Unitvalue ON Metric.ID = Metric_Unitvalue.Metric_ID
)
INNER JOIN Metric_Value_Measurement ON (
Metric.ID = Metric_Value_Measurement.Metric_ID
AND (
SELECT Measurement_Date
FROM Metric_Value_Measurement
WHERE Metric_ID = Metric.ID
) = Metric_Value_Measurement.Measurement_Date
)
GROUP BY Desired_Future_State_Metric.Desired_Future_State_ID
,Desired_Future_State_Metric.Metric_ID
,Desired_Future_State_Metric.Target_Value
,Desired_Future_State_Metric.Target_Date
,Metric.Description
,Metric.Unit
,Metric_Value_Measurement.Measurement_Date;
答案 0 :(得分:1)
长嵌套SQL语句可能是一个真正的访问难题。我会根据measurement_ID进行分组查询,并获取最新日期,然后再将该查询链接到测量表:
QUERY 'MostRecentMeasurements':
SELECT Metric_ID, MAX(Measurement_date) as MostRecentMeasurementDate FROM Measurement
GROUP BY Metric_ID
QUERY2:
SELECT Metric_ID, Measurement_value FROM Measurement INNER JOIN MostRecentMeasurements ON
(Measurement.Metric_ID=MostRecentMeasurements.Metric_ID) AND (Measurement.Measurement_date =
MostRecentMeasurements.MostRecentMeasurementDate)