我查看了最好的每组标签,发现了很多信息,但没有解决我的具体问题。
表A列出了所有使用材料的化学数据。 它有RMCode,TradeName,Hazardous,DangerousGood等字段(全部 TEXT )
表B包含所有材料安全数据表(至少每5年更新一次),我们存储已取代的文件。 这些字段是RMCode( TEXT ),linkMSDS( HYPERLINK )和MSDSdate( DATE / TIME )。 LinkMSDS是pdf的超链接,我们在MSDSdate中存储发布日期。一个RM代码可以有许多附加的MSDS。
这两个表通过“RM Code”字段链接。
我想生成所有DangerousGoods材料的清单 - 但我只想要展示最新的MSDS。 以下代码目前正在返回所有MSDS。
SELECT tableB。[RMCode],tableA。[TradeName],tableA。[危险],tableA。[DangerousGood],tableB。[link MSDS]
FROM tableA INNER JOIN tableB ON tableA。[RM Code] = tableB。[RM code]
WHERE tableA。[DangerousGood]<> “N / A”和tableB。[MSDSdate]在
(SELECT MAX(tableB。[MSDSdate])
FROM tableB
GROUP BY tableB。[RMCode])
ORDER BY tableB。[RMCode];
答案 0 :(得分:0)
听起来像你需要每个RMCode的最新MSDSdate。
SELECT RMCode, Max(MSDSdate) AS MaxOfMSDSdate
FROM TableB
GROUP BY RMCode;
如果这是正确的,您可以将它用作连接到TableA的suquery,并添加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"));
最后,如果您需要每个RMCode / MSDSdate组合的linkMSDS值,您可以加入另一个TableB副本。
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"));