我从不同的角度提出这个问题,但根据这个问题的答案,我相信我现在更接近实现我所需要的。
总之,问题是:我有3个表,Metric
,Desired_Future_State_Metric
和Metric_Value_Measurement
。正如您可能从名称中推断的那样,Metric_Value_Measurement
是一系列不同指标的日期约束(对于任何给定的指标,都会有多个度量)。
我要做的是在Desired_Future_State_Metric
条记录表中显示最新的衡量标准。简而言之,这要求我在按日期排序列表时为任何给定的Metric
选择第一条记录。遗憾的是,Access查询构建器不允许我这样做,因为我无法对单个记录执行SELECT
并按其他列排序。
在此基础上,我认为我需要直接编写SQL,我的尝试在下面 - 不幸的是,这会导致错误 - Syntax error in query expression 'Metric.ID = Metric_Value_Measurement.Metric_ID AND (SELECT Measurement_Date FROM Metric_Value_Measurement WHERE Metric_ID = '1') = Metric_Value_Measurement.Measurement_Dat'.
- 我认为这是因为我试图加入具有多个记录的单个记录(来自SELECT MAX
嵌套查询)。
我已在下面发布了我的代码,但我可以接受其他建议 - 如何将表格加入每个Desired_Future_State_Metric
?
我的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 MAX(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;
我桌子的结构:
Metric
----------
ID
Description
Desired_Future_State_Metric
----------
ID
Metric_ID
Desired_Future_State_ID
Target_Value
Target_Date
Metric_Value_Measurement
----------
ID
Metric_ID
Measurement_Date
Measurement_Value
编辑:可能值得一提的是,我尝试在2列上进行此连接以避免使用子报告(这在特定报告中非常具有挑战性,我正在运行)。因此,我需要加入第二列,因为' master'表格Desired_Future_State_Metric
- 与Metric_Value_Measurement
没有直接关系(通过Metric
相关)。
编辑2:根据Viking的评论澄清 - 我正在尝试为每个Desired_Future_State_Metric
获取最新的Measurement_Value。在这种情况下,最近的定义是测量日期,而不是最高ID
。
答案 0 :(得分:1)
编辑 - 添加Metric_Value_Measurement以连接表达式以在查询结果中获取Measurement_Value。
对我来说,您希望将特定Metric_ID的最新测量值连接回Desired_Future_State_Metric表(如果不是这样,后面的内容可能会有所帮助,也可能没有帮助。)
执行此操作的一种方法是在查询的连接表达式中使用子查询,该子查询选择与最近的Measurement_Date关联的Metric_ID。该子查询看起来像这样:
SELECT Metric_ID, Max(Measurement_Date) As MaxDate
FROM Metric_Value_Measurement
GROUP BY Metric_ID
您在连接表达式中使用子查询的查询将如下所示:
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_Value
,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)
INNER JOIN (SELECT Metric_ID, Max(Measurement_Date) As MaxDate FROM
Metric_Value_Measurement GROUP BY Metric_ID) As S
ON Metric.ID = S.Metric_ID
ORDER 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;
一些注意事项: