VBA MS Access 查询 - 从链接表返回最大日期

发布于 2024-12-03 23:25:51 字数 962 浏览 0 评论 0原文

我浏览了Greatest-n-per-group标签并找到了很好的信息,但没有解决我的具体问题。

表 A 存储有关所有使用材料的化学数据。 它具有 RMCode、TradeName、Hazardous、DangerousGood(均为 TEXT)等字段。

表 B 包含所有材料安全数据表(至少每 5 年更新一次),并且我们存储取代的文档。 这些字段是 RMCode (TEXT)、linkMSDS (HYPERLINK) 和 MSDSdate (DATE/TIME)。 LinkMSDS 是 pdf 的超链接,我们将发布日期存储在 MSDSdate 中。一个 RM 代码可以附有多个 MSDS。

这两个表通过“RM 代码”字段链接。

我想生成所有属于危险物品的材料的列表 - 但我只想提供最新的 MSDS。 以下代码当前返回所有 MSDS。

选择 tableB.[RMCode]、tableA.[商品名称]、tableA.[危险]、tableA.[DangerousGood]、tableB.[链接 MSDS]

FROM tableA INNER JOIN tableB ON tableA.[RM 代码]=tableB.[RM 代码]

WHERE tableA.[DangerousGood] <> “N/A”和表 B.[MSDSdate] 中

<块引用> <块引用>

(SELECT MAX(tableB.[MSDSdate])

来自表B

GROUP BY tableB.[RMCode])

ORDER BY tableB.[RMCode];

I have looked throughout the greatest-n-per-group tag and found great information but nothing that solves my specific problem.

Table A stores chemical data about all materials used.
It has fields such as RMCode, TradeName, Hazardous, DangerousGood (all TEXT)

Table B contains all the material safety data sheets (which are updated at least every 5 years), and we store superceded documents.
The fields are RMCode (TEXT), linkMSDS (HYPERLINK) and MSDSdate (DATE/TIME).
LinkMSDS is hyperlink to the pdf and we store the date of issue in MSDSdate. One RM code can have many attached MSDSs.

The two tables are linked through the field 'RM Code.'

I want to generate a list of all materials which are DangerousGoods - but I want only the most recent MSDS to be presented.
The code below is currently returning all MSDSs.

SELECT tableB.[RMCode], tableA.[TradeName], tableA.[Hazardous], tableA.[DangerousGood], tableB.[link MSDS]

FROM tableA INNER JOIN tableB ON tableA.[RM Code]=tableB.[RM code]

WHERE tableA.[DangerousGood] <> "N/A" and tableB.[MSDSdate] In

(SELECT MAX(tableB.[MSDSdate])

FROM tableB

GROUP BY tableB.[RMCode])

ORDER BY tableB.[RMCode];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

七堇年 2024-12-10 23:25:51

在我看来,您需要每个 RMCode 的最新 MSDS 日期。

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"));

Sounds to me like you need the latest MSDSdate for each RMCode.

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

If that's correct, you can use it as a suquery joined to TableA and add in the WHERE clause to exclude the rows with 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"));

Finally, if you need the linkMSDS values for each of those RMCode/MSDSdate combinations, you can join another copy of 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"));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文