1

私はいくつかのデータを持っています。これは、追跡された供給の毎日(毎日)の終値であり、日付(日付)、PXLast(その日の終値))の2つの列を持つ1つのMS Accessテーブルにあります。1991 年 1 月から 2013 年 8 月までの毎日のデータがあり、次のように、昨年末と比較した各年末の PXLast の変化率を取得したいと考えていました。

年 | 年 | PXLastの変化率(前年比)

1991年 | 15.2% 1992年 | 9.2%

年の終了日はさまざまで (常に 31 日とは限りません)、次の方法で最後の PXLast 値を取得しようとしています。

1. 毎年 12 月の最大日付を取得します。結果は MyYear、MyMonth、MyDay になります。

2.DateSerial(MyYear, MyMonth, MyDay)で結合

3.結果のクエリをテーブルに結合し、日付列で内部結合します

4.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;

前年末のクエリを使用して対応する値を取得するのを手伝ってくれる人はいますか

たとえば、2006 年 12 月 29 日の場合、現在の値を表示し、2005 年 12 月 31 日の値を表示する必要があります。

同じ行にすなわち

年 | 年 | 現在の年末| 前年度末

2005年 | 3449.00 | 4611.19

2006年 | 9.2% |3449.00

どんな助けでも大歓迎です。

これを行うためのより良い方法への提案は大歓迎です....

4

1 に答える 1

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

まず、Access で [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
于 2013-10-07T16:24:57.800 に答える