0

我查看了最大的每個組標籤,發現了很好的信息,但沒有解決我的具體問題。VBA MS訪問查詢 - 從鏈接表返回最大日期

表A存儲所有使用材料的化學數據。 如RMCode,商品名,危險,DangerousGood(所有TEXT

表B它具有字段包含了所有的材料安全數據表(其被更新至少每5年),和我們所取代存儲文件。 這些字段是RMCode(TEXT),linkMSDS(HYPERLINK)和MSDSdate(DATE/TIME)。 LinkMSDS是指向pdf的超鏈接,我們將發佈的日期存儲在MSDSdate中。一個RM代碼可以有許多附加的MSDS。

這兩個表通過字段'RM代碼'鏈接。

我想生成所有DangerousGoods材料的列表 - 但我只想要顯示最新的MSDS。 下面的代碼目前正在返回所有的MSDS。

SELECT tableB的。[RMCode],表A [商品名],表A。[危險],表A。[DangerousGood],tableB的。[鏈接MSDS]

FROM TABLEA INNER JOIN tableB的TableA上。[ RM代碼] = tableB的。[RM碼]

WHERE TABLEA。[DangerousGood] <> 「N/A」 和tableB的。[MSDSdate在

(SELECT MAX(tableB的。[MSDSdate ])

FROM tableB的

GROUP BY tableB的[RMCode])

ORDER BY tableB的[RMCode]。。

+1

我懷疑答案很簡單......一旦我們理解了這個問題。請考慮重新閱讀並更清楚。 –

+0

謝謝@iDevlop。希望這些變化使它更清晰。 – Denbigh

回答

0

聽起來像我需要每個RMCode最新的MSDSdate。

SELECT RMCode, Max(MSDSdate) AS MaxOfMSDSdate 
FROM TableB 
GROUP BY RMCode; 

如果這是正確的,你可以使用它作爲一個suquery加入到TableA的並在WHERE子句中添加排除與DangerousGood =「N/A」的行。

SELECT a.RMCode, a.DangerousGood, b.MaxOfMSDSdate 
FROM 
    TableA AS a 
    INNER JOIN [ 
     SELECT RMCode, Max(MSDSdate) AS MaxOfMSDSdate 
     FROM TableB 
     GROUP BY RMCode 
     ]. AS b 
     ON a.RMCode = b.RMCode 
WHERE (((a.DangerousGood)<>"N/A")); 

最後,如果你需要的linkMSDS值爲每個那些RMCode/MSDSdate組合,你可以加入表B的另一個副本。

SELECT a.RMCode, a.DangerousGood, b.MaxOfMSDSdate, b2.linkMSDS 
FROM 
    (TableA AS a 
    INNER JOIN [ 
     SELECT RMCode, Max(MSDSdate) AS MaxOfMSDSdate 
     FROM TableB 
     GROUP BY RMCode 
     ]. AS b 
     ON a.RMCode = b.RMCode) 
    INNER JOIN TableB AS b2 
     ON (b.RMCode = b2.RMCode) AND (b.MaxOfMSDSdate = b2.MSDSdate) 
WHERE (((a.DangerousGood)<>"N/A")); 
+0

@Denbigh:如果你在Access中輸入上面的查詢,你將不得不將'[...]。改成'(..)'。每次保存查詢時,Access都會更改子查詢周圍的括號,但奇怪的是,當您試圖保存時,它們不會接受這些方括號。 –

+0

再次感謝@HansUp!這已經解決了我的問題。 – Denbigh

+0

@iDevlop感謝您提示我解決問題聲明(也包括方括號提示) – Denbigh