2017-01-04 126 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