MS Access Query 计算季度增长率的 SQL 语句
Posted
技术标签:
【中文标题】MS Access Query 计算季度增长率的 SQL 语句【英文标题】:SQL Statement for MS Access Query to Calculate Quarterly Growth Rate 【发布时间】:2013-09-17 15:53:13 【问题描述】:我在 MS Access 数据库中有一个名为“Historical_Stock_Prices”的表。此表包含以下列:Ticker、Date1、Open1、High、Low、Close1、Volume、Adj_Close。这些行包含每个工作日的每个代码的数据。
我需要从我的 VB.net 程序内部运行一个查询,该查询将在我的程序中返回一个表格,其中显示列出的每个股票代码每年每个季度的增长率。所以对于这个例子,我需要找到 2012 年第四季度 GOOG 的增长率。p>
要手动计算,我需要将第 4 季度(2012 年 12 月 31 日)最后一个营业日的收盘价除以第 4 季度第一个营业日(10 月 1 日)的开盘价2012)。然后我需要减去 1 并乘以 100 以获得百分比。
实际计算如下:((707.38/759.05)-1)*100 = -6.807%
每个季度的第一天和最后一天可能会因周末而有所不同。
我无法为从原始历史价格表创建增长率表的 SQL 语句提供正确的语法。任何人都可以帮我处理 SQL 语句吗?
【问题讨论】:
【参考方案1】:这是我解决问题的方法:
我首先创建一个名为 [Stock_Price_with_qtr] 的已保存查询 Access,它计算每一行的年份和季度:
SELECT
Historical_Stock_Prices.*,
Year([Date1]) AS Yr,
Switch(Month([Date1])<4,1,Month([Date1])<7,2,Month([Date1])<10,3,True,4) AS Qtr
FROM Historical_Stock_Prices
然后我会在 Access 中创建另一个名为 [Qtr_Dates] 的已保存查询,用于查找每个股票代码和季度的第一个和最后一个工作日:
SELECT
Stock_Price_with_qtr.Ticker,
Stock_Price_with_qtr.Yr,
Stock_Price_with_qtr.Qtr,
Min(Stock_Price_with_qtr.Date1) AS Qtr_Start,
Max(Stock_Price_with_qtr.Date1) AS Qtr_End
FROM Stock_Price_with_qtr
GROUP BY
Stock_Price_with_qtr.Ticker,
Stock_Price_with_qtr.Yr,
Stock_Price_with_qtr.Qtr
这将允许我在 VB.NET(或 C#,或 Access 本身)中使用以下查询来计算季度增长率:
SELECT
Qtr_Dates.Ticker,
Qtr_Dates.Yr,
Qtr_Dates.Qtr,
(([Close_Prices]![Close1]/[Open_Prices]![Open1])-1)*100 AS Qtr_Growth
FROM
(
Historical_Stock_Prices AS Open_Prices
INNER JOIN Qtr_Dates
ON (Open_Prices.Ticker = Qtr_Dates.Ticker)
AND (Open_Prices.Date1 = Qtr_Dates.Qtr_Start)
)
INNER JOIN
Historical_Stock_Prices AS Close_Prices
ON (Qtr_Dates.Ticker = Close_Prices.Ticker)
AND (Qtr_Dates.Qtr_End = Close_Prices.Date1)
【讨论】:
@nordeen1 检查您上次查询的拼写错误。我刚刚将答案中的最后一个查询复制并粘贴到 Access 2010 和 C# 2010 Express 中,并且在每种情况下查询都运行良好。 @nordeen1 您是否将前两个查询输入 Access 并在 Access 中保存它们(使用上一个查询中引用的确切名称)? @nordeen1 回复:“是否可以在我的程序中创建并保存前两个查询?” - 是的,您可以使用 DDL 从您的 VB.NET 应用程序在 Access 数据库中创建保存的查询。只需使用OleDbCommand
对象来执行CREATE VIEW Stock_Price_with_qtr AS SELECT Historical_Stock_Prices.*, ...
。
@nordeen1 您可以创建一个交叉表 (PIVOT) 查询来获取最后一个查询的结果并按照您的描述重新格式化它们。该方法类似于我的回答here。如果您需要帮助,请打开一个新问题。
如果 [Ticker] 是 Memo
字段,则必须将其更改为 Text
。以上是关于MS Access Query 计算季度增长率的 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章