2013-10-07 38 views
1

我有一些數據是每天(一天中)關閉跟蹤電源的數字,並且位於具有2列的一個MS Access表中 - 日期(日期),PXLast(當天的收盤數字))。 我有從1991年1月到2013年8月的每日數據,我想要得到PXLast在每年年底與去年年底相比的變化百分比,如下所示:使用SQL從MS Access表中獲取年份日期和值的變量

年份| PXLast的百分比變化(年同比)

1991 | 15.2% 1992 | 9.2%

年結日變化(並不總是31日),我會有關獲取最後PXLast值:每年

1.Get最高日12月:在MyYear,MyMonth,MyDay結果

2.Combine它使用DateSerial(MyYear,MyMonth,MyDay)

3.Join生成的查詢表中並且在日期欄

內加入4.Get的PXLast值

SELECT EndDates.EndDates, NSE20.PX_LAST AS LookPoint 
    FROM NSE20 INNER JOIN 
    (SELECT DateSerial([MyYear],[MyMonth],[MyDay]) 
    AS EndDates FROM (SELECT 12 AS MyMonth, MyDay, MyYear FROM 
    (SELECT Max(Day([Dates])) AS MyDay, Year([Dates]) AS MyYear 
    FROM NSE20 WHERE (((Month([Dates]))=12)) 
    GROUP BY Year([Dates])) AS EndYearValues) 
    AS EndValueDates) 
    AS EndDates ON NSE20.Dates = EndDates.EndDates; 

誰能幫助我獲得使用上年末查詢對應的值

例如,對於29 2006年12月,它應該顯示的當前值並顯示31值2005年12月

在同一排即

上年|當前年末|上一年結束

2005 | 3449.00 | 4611.19

2006 | 9.2%| 3449.00

任何幫助表示讚賞。

任何建議,以更好的方式做到這一點非常歡迎....

回答

1

讓我們假設你在一個名爲[NSE20表看起來像這樣

Dates  PXLast 
---------- ------ 
2010-07-01  131 
2010-12-31  130 
2011-11-12  123 
2011-12-30  125 
2012-01-03  127 
2012-12-31  129 

我想通過創建訪問已保存的查詢名爲[NSE20_year_ends]開始有一些測試數據標識年 - 由(日曆)年度結束日期:

SELECT Year(Dates) AS CalendarYear, Max(Dates) AS YearEndDate 
FROM NSE20 
GROUP BY Year(Dates) 

這將產生

CalendarYear YearEndDate 
------------ ----------- 
     2010 2010-12-31 
     2011 2011-12-30 
     2012 2012-12-31 

那麼我創建一個名爲[NSE20_year_end_balances]另一個保存的查詢,提取每年的期末餘額:對查詢計算百分比

SELECT NSE20_year_ends.CalendarYear, NSE20.PXLast 
FROM 
    NSE20 
    INNER JOIN 
    NSE20_year_ends 
     ON NSE20.Dates = NSE20_year_ends.YearEndDate 

這將會給我們

CalendarYear PXLast 
------------ ------ 
     2010  130 
     2011  125 
     2012  129 

現在我們可以做一個自聯接改變

SELECT 
    y1.CalendarYear, 
    (y1.PXLast - y0.PXLast)/y0.PXLast * 100 AS PctChange 
FROM 
    NSE20_year_end_balances y1 
    INNER JOIN 
    NSE20_year_end_balances y0 
     ON y0.CalendarYear = y1.CalendarYear - 1 

導致

CalendarYear PctChange   
------------ ----------------- 
     2011 -3.84615384615385 
     2012    3.2 
+0

我似乎無法獲得自加入運行 – Avagut

+0

糟糕,語法錯誤,在自加入的首次用戶的From子句中添加了逗號。 – Avagut

+0

它已經工作。正是我所需要的!感謝您的幫助,以及自我加入使用的教訓。 – Avagut

相關問題