2017-01-04 73 views
0

下面的代码引用两个表。每个表的结构都是相同的,唯一不同的是“PRICE”和“PRICE_DATE”值。这是因为它与一年前创建的表格相同。我想要做的就是创建一个新表格,它为每个基金获取每张表格的最新价格,并将其插入新表格。除此之外,我还想要另一栏来计算增长。下面的代码适用于此目的。访问查询将两个表与标准组合在一起

SELECT [2015_11_Fund_Prices].FUND_CODE, [2015_11_Fund_Prices].PRICE AS 
[[email protected]_112015], [2016_11_Fund_Prices].PRICE AS [[email protected]_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函数替换它,这将导致查询仅引用具有最高日期值的行中的价格。

任何人都可以帮忙吗?使用 Tabels是

+-----------+------------+-------+ 
    | 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

你需要一个子查询是这样的:

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

如果添加此子查询以上,并将其链接到2016_11_Fund_PricesFUND_CODEPRICE_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 
+0

所以你建议有两个查询来产生结果?我认为这是可能的一个。 – naiminp

+0

另外,为什么当我在上面的代码中添加“SELECT PRICE”时,结果会再次返回所有日期,而不仅仅是最大值? – naiminp

+0

您可以将其作为子查询添加到您现有的查询中,但如果您将它作为单独的查询使用,则排除故障时会更简单。只需添加SELECT PRICE应该会给您一个错误,因为您既没有按PRICE进行汇总也没有进行分组。如果您将PRICE添加到分组,那么您将获得所有日期,因为您现在正按每个单一价格进行分组,而不是仅分配每个FUND_CODE;这就是为什么你必须将它作为一个单独的子查询来使用,并且不能试图通过将PRICE添加到它来快捷方式。 – SunKnight0