SQL Access 2007/2010选择具有不同ID的最大日期

时间:2016-03-01 14:37:25

标签: sql ms-access-2010 ms-access-2007 maxdate

我相信很多人已经问过这个问题,因为我已经从这里读到了所有话题。但问题是我有3个相关的表而不是2个,我不知道如何为此编码

我有一张桌子:tbl_Instrumentstbl_Recordtbl_Cal_Bytbl_Instruments包含所有文书信息,包括其ID。 tbl_Cal_By具有校准工具的任何人的信息。 tbl_Records拥有所有仪器记录及其校准日期。它将tbl_Instruments中的ID继承为 Inst_ID ,将tbl_Cal_By中的名称继承为 Name_ABBR

tbl_Instruments:ID,Type

tbl_Cal_By:Cal_ID,Name_ABBR

tbl_Records:Record_ID,Inst_ID,Cal_Date,Name_ABBR

这是我的代码。

SELECT tbl_Records.Inst_ID
    ,tbl_Instruments.Type
    ,Max(tbl_Records.Cal_Date) AS MaxOfCal_Date
    ,tbl_Cal_By.Name_ABBR
FROM tbl_Cal_By
RIGHT JOIN (
    tbl_Instruments INNER JOIN tbl_Records ON tbl_Instruments.ID = tbl_Records.Inst_ID
    ) ON tbl_Cal_By.ID = tbl_Records.BY
GROUP BY tbl_Records.Inst_ID
    ,tbl_Instruments.Type
    ,tbl_Cal_By.Name_ABBR;

期望的结果:

enter image description here

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

你可以用几种方法做到这一点,其中一种是存在的:

SELECT tbl_Records.Inst_ID
    ,tbl_Instruments.Type
    ,tbl_Records.Cal_Date AS MaxOfCal_Date
    ,tbl_Cal_By.Name_ABBR
FROM tbl_Cal_By
RIGHT JOIN (
    tbl_Instruments INNER JOIN tbl_Records ON tbl_Instruments.ID = tbl_Records.Inst_ID
    ) ON tbl_Cal_By.ID = tbl_Records.BY
WHERE NOT EXISTS(SELECT 1 FROM tbl_Records t
                 WHERE t.Inst_ID = tbl_Instruments.ID
                      AND t.Cal_date > tbl_Records.Cal_Date)

我不完全确定访问语法和别名..所以也许你必须稍微调整它 - 比如第一个tbl_records的别名所以它会识别它,或者它可能会工作..