【发布时间】:2014-05-26 21:37:11
【问题描述】:
我从不同的角度提出了这个问题,但根据对这个问题的回答,我相信我现在离实现我的需要更近了。
总而言之,问题是这样的:我有 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 列上执行此连接以避免使用子报表(这在我正在运行的特定报表中将非常具有挑战性)。因此,我需要加入第二列,因为“主”表 - Desired_Future_State_Metric - 与 Metric_Value_Measurement 没有直接关系(通过 Metric 关联)。
编辑 2:澄清一下,基于 Viking 的 cmets - 我正在尝试获取每个 Desired_Future_State_Metric 的最新 Measurement_Value。在这种情况下,最近是由测量日期定义的,而不是最高的ID。
【问题讨论】:
-
这个问题可能对你有帮助:stackoverflow.com/q/23658237/78522
-
感谢您的提醒 - 尽管这个问题似乎讨论了在单个列上加入不同方式的优点,而不是在 2 列上加入?
-
正如@viking4821 在下面的答案中所暗示的那样,从您的文字和 SQL 中并不清楚您要达到的目标。您能否澄清一下是否需要 Metric 中的每一行,Desired_Future_State_Metric 或 Metric_Value_Measurement 或两者中相同 ID 的日期最长的行。
-
INNER JOIN ON AND ... 中的子选择是不可能的。这就是为什么我向您指出一个非常简化的子查询示例
标签: sql ms-access ms-access-2007