在查询中查找最后价格并在报告中显示

Find last price in query and display in report

我已经尝试解决这个问题一段时间了,但我找到的所有示例(还有很多)似乎都不适合我。

问题描述: 我有一份显示股票信息的报告,该报告基于 Access 中的查询。该报告通过命令按钮打开,该按钮填充传递给 DoCmd.OpenReport.

的 SQL 字符串

在报告中我需要显示股票的最后可用价格。

尝试的解决方案: 我试图使用 DMAX() 来查找查询中的最后可用日期。查询生成器中的代码如下所示:LastDate: DMax("Date";"tblFunds_TS_Data")

本次查询的SQL代码如下:

SELECT tblFunds_TS_Data.ISIN, DMax("Date","tblFunds_TS_Data") AS LastDate
FROM tblFunds_TS_Data
GROUP BY tblFunds_TS_Data.ISIN, DMax("Date","tblFunds_TS_Data");

这为我提供了每只股票的最后日期,但不是实际股票价格。

问题:如何获取每只股票显示的最后股价?

使用 DLookup:

LastPrice: DLookUp("[FieldWithPrice]";"[tblFunds_TS_Data]";"[Date]=DMax('[Date]','[tblFunds_TS_Data]')")

请注意混合使用本地化和非本地化定界符,因为 DMax 现在在 DLookUp 标准内。

为了显示最后日期的最后价格,我最终将 DMAX 函数放在设计视图的条件部分。因此,以最后日期为标准,将始终显示每只股票的价格。

这是我的 SQL 代码:

SELECT tblFunds_TS_Data.ISIN, tblFunds_TS_Data.Date, tblFunds_TS_Data.Price
FROM tblFunds_TS_Data
GROUP BY tblFunds_TS_Data.ISIN, tblFunds_TS_Data.Date, tblFunds_TS_Data.Price
HAVING (((tblFunds_TS_Data.Date)=DMax("Date","tblFunds_TS_Data")));

确认此查询为您提供每个 ISIN:

的最新日期
SELECT t1.ISIN, Max(t1.Date) AS LastDate
FROM tblFunds_TS_Data AS t1
GROUP BY t1.ISIN;

假设它确实为您提供了正确的结果,请将其用作您加入回 tblFunds_TS_Data 的子查询,以便您可以检索匹配的 [=16=每个 ISIN/LastDate 组合的价格:

SELECT sub.ISIN, sub.LastDate, t2.Price
FROM
    (
        SELECT t1.ISIN, Max(t1.Date) AS LastDate
        FROM tblFunds_TS_Data AS t1
        GROUP BY t1.ISIN
    ) AS sub
    INNER JOIN tblFunds_TS_Data AS t2
    ON sub.ISIN = t2.ISIN AND sub.LastDate = t2.Date;