2016-03-01 53 views
1

我相信很多人已經問過這個問題,因爲我已經閱讀了這裏的所有主題。但問題是我有3個相關的表格,而不是2,我不知道如何編碼該代碼SQL Access 2007/2010選擇帶有不同ID的最大日期

我有一個表格:tbl_Instruments,tbl_Recordtbl_Cal_Bytbl_Instruments擁有所有的樂器信息,包括他們的ID。 tbl_Cal_By具有校準工具的人的信息。 tbl_Records包含所有儀器記錄及其校準日期。它繼承tbl_Instruments的ID爲Inst_IDtbl_Cal_By的名稱爲Name_ABBR

tbl_Instruments:ID,類型

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

您可以通過多種方法做到這一點,就是一個存在:

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所以它會識別它,或者它可以工作..

+0

This Works Perfectly!但是你介意從WHERE開始解釋最後一部分嗎?對不起,我有點新到SQL ~~ –

+0

當然,如果你接受我的答案(V),我也會很感激。在那裏使用NOT EXISTS函數來檢查查詢之後的查詢是否返回。它將過濾返回某處的任何行。所以我做了什麼,是爲每個記錄,檢查是否有一個更大的日期那麼那個,如果是的話 - 它過濾它的結果。這將使我們只有最新的日期。 @JasonChan – Yossi

+0

我知道這已經很長一段時間了,但最近我添加了tbl_Records.Path,並且老問題又回來了。所以要再次過濾它,我嘗試添加「AND t.Path = tbl_Records.Path」,但似乎這是錯誤的? –

相關問題