如何在Access

时间:2016-02-25 07:51:32

标签: sql ms-access ms-access-2010

我发现这个问题特别难以谷歌,因为搜索条件提供了匹配的结果,但不是我正在寻找的......

我正在尝试使用MS Access计算给定时间段内股票的表现。

示例计算:

  • 01.01.2016价格:100.00
  • 25.02.2016价格:110.00

伪代码:

Performance = Ending Price/Starting Price - 1

就像在Excel中计算一样简单,我似乎无法在MS Access中完成它。到目前为止,我的尝试已经无法完成结束日期的简单任务。失败消息是:

  

"您尝试执行不包含指定的查询   表达' MoPo_BM_ID'作为聚合函数的一部分"

更新 我找到了website,其中包含一些可以创建所需结果的代码。该示例工作正常,但我尝试根据自己的情况进行调整,但收到错误消息"此子查询最多可以返回一条记录"。

SELECT x.Mandat_ID, x.BeginPrice, x.EndPrice, ([EndPrice]-[BeginPrice])/[BeginPrice] AS RETURN
FROM (SELECT Mandat_ID,

     (SELECT Value AS BeginDate
      FROM tbl_AMSDB_IndexMFP AS P
      WHERE (Mandat_ID = Mandat_ID)
        AND (Date =
               (SELECT MIN(Date) AS Expr1
                FROM tbl_AMSDB_IndexMFP AS D
                WHERE (Mandat_ID = Mandat_ID)))) AS BeginPrice,

     (SELECT Value AS BeginDate
      FROM tbl_AMSDB_IndexMFP AS P
      WHERE (Mandat_ID = Mandat_ID)
        AND (Date =
               (SELECT MAX(Date) AS Expr1
                FROM tbl_AMSDB_IndexMFP AS D
                WHERE (Mandat_ID = Mandat_ID)))) AS EndPrice
   FROM tbl_AMSDB_IndexMFP
   GROUP BY Mandat_ID)  AS x
WHERE Mandat_ID=6028;

如何让它向我展示一条记录?

1 个答案:

答案 0 :(得分:0)

要使最大日期起作用,您需要按选择中的其他字段进行分组。所以你的查询变成了

SELECT 
   tbl_MoPo_BM.MoPo_BM_ID, 
   tbl_AMSDB_IndexMFP.Mandat_ID,tbl_MoPo_BM.Launch_Date, 
   Max([tbl_AMSDB_IndexMFP]![Date]) AS End_Date
FROM 
tbl_AMSDB_IndexMFP 
INNER JOIN tbl_MoPo_BM ON tbl_AMSDB_IndexMFP.Mandat_ID =  
tbl_MoPo_BM.AMSDB_MoPo_Code
GROUP BY 
   tbl_MoPo_BM.MoPo_BM_ID, 
   tbl_AMSDB_IndexMFP.Mandat_ID,
   tbl_MoPo_BM.Launch_Date, 
WHERE (((tbl_MoPo_BM.MoPo_BM_ID)=107))

在不知道您的价值/价格字段是什么的情况下,Launch_Date是否为开始日期以及您的indexMFP表中是否有重复的条目我无法编写其余内容以便为您提供伪性能计算的答案。