访问查询将两个表与条件组合在一起

时间:2017-01-04 19:15:18

标签: sql ms-access subquery where having

以下代码引用了两个表。每张表的结构都相同,唯一的区别是" PRICE"和" PRICE_DATE"值。这是因为它与一年前创建的表格相同。我想做的就是有一个新的表格,每张表格中的最新价格,并将其插入新表格中。除此之外,我还想要另一个计算增长的专栏。 以下代码可用于此目的。

SELECT [2015_11_Fund_Prices].FUND_CODE, [2015_11_Fund_Prices].PRICE AS 
[PRICE_@_112015], [2016_11_Fund_Prices].PRICE AS [PRICE_@_112016]
([2016_11_Fund_Prices].[PRICE]/[2015_11_Fund_Prices].[PRICE]-1) AS Growth INTO 2016_11_Monthly_Fund_Prices
FROM 2016_11_Fund_Prices INNER JOIN 2015_11_Fund_Prices ON [2016_11_Fund_Prices].FUND_CODE = [2015_11_Fund_Prices].FUND_CODE
GROUP BY [2015_11_Fund_Prices].FUND_CODE, [2015_11_Fund_Prices].PRICE_DATE, [2015_11_Fund_Prices].PRICE, [2016_11_Fund_Prices].PRICE, [2016_11_Fund_Prices].PRICE_DATE, ([2016_11_Fund_Prices].[PRICE]/[2015_11_Fund_Prices].[PRICE]-1)
HAVING ((([2015_11_Fund_Prices].PRICE_DATE)=#24/11/2015#) AND (([2016_11_Fund_Prices].PRICE_DATE)=#24/11/2016#));

但是,此代码假定两个表中的最新价格为24/11。我想用max函数替换它,这将导致查询仅引用具有最高日期值的行中的价格。

有人可以帮忙吗? 使用的表格是

    +-----------+------------+-------+
    | Fund_Code | PRICE_DATE | PRICE |
    +-----------+------------+-------+
    |         1 | 12/12/12   | 1     |
    |         1 | 13/12/12   | 1.2   |
    |         1 | 14/12/12   | 1.1   |
    |         2 | 12/12/12   | 1.12  |
    |         2 | 13/12/12   | 1.13  |
    |         2 | 14/12/12   | 1.11  |

所以第二个表格完全相同,但是对应于下一年的日期。 我想要的只是一张表:

Fund_Code Price1 Price2 Growth

由于

1 个答案:

答案 0 :(得分:1)

您需要这样的子查询:

SELECT FUND_CODE, MAX(PRICE_DATE) AS MaxPriceDate FROM 2016_11_Fund_Prices GROUP BY FUND_CODE

如果您将此子查询添加到上述内容并将其链接到2016_11_Fund_PricesFUND_CODE上的PRICE_DATE=MaxPriceDate表格,则应该执行您需要的操作。

SELECT 2016_11_Fund_Prices.FUND_CODE, PRICE, PRICE_DATE
FROM 2016_11_Fund_Prices
    INNER JOIN (SELECT FUND_CODE, MAX(PRICE_DATE) AS MaxPriceDate FROM 2016_11_Fund_Prices GROUP BY FUND_CODE) mp
        ON 2016_11_Fund_Prices.FUND_CODE=mp.FUND_CODE AND 2016_11_Fund_Prices.PRICE_DATE=mp.MaxPriceDate