2013-09-17 3 views
1

У меня есть таблица с именем «Historical_Stock_Prices» в базе данных MS Access. В этой таблице есть столбцы: Тикер, Дата1, Open1, Высокий, Низкий, Close1, Объем, Adj_Close. Строки состоят из данных для каждого тикера за каждый рабочий день.Заявление SQL для запроса на доступ к MS для вычисления ежеквартальной скорости роста

Мне нужно запустить запрос из моей программы VB.net, которая вернет таблицу в моей программе, которая отображает темпы роста за каждый квартал каждого года для каждого перечисленного символа. Поэтому для этого примера мне нужно будет найти темпы роста для GOOG в 4 квартале 2012 года.

Чтобы рассчитать это вручную, мне нужно будет взять Close Price в последний день BUSINESS 4-го квартала (12/31/2012), деленная на открытую цену первого ДНЯ БИЗНЕСА 4-го квартала (10/1/2012). Затем мне нужно вычесть на 1 и умножить на 100, чтобы получить процент.

Фактический расчет будет выглядеть следующим образом: ((707,38/759,05) -1) * 100 = -6,807%

Первые и последние дни каждого квартала может варьироваться в зависимости от выходных дней.

Я не могу придумать правильный синтаксис инструкции SQL для создания таблицы темпов роста из таблицы необработанных исторических цен. Может ли кто-нибудь помочь мне со статусом SQL?

ответ

1

Вот как я бы подойти к решению проблемы:

Я хотел бы начать с создания сохраненного доступа для запроса с именем [Stock_Price_with_qtr], который вычисляет год и квартал для каждой строки:

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 

Тогда я d создать еще один сохраненный запрос в 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 

Это позволит мне использовать followi ng в 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) 
+0

Хорошо! Я попытался включить все три запроса в Access. Первые два не были введены без проблем. В последнем запросе появляется сообщение об ошибке «Синтаксическая ошибка в выражении SQL». – gromit1

+1

@ nordeen1 Проверьте свой последний запрос на опечатки. Я только что скопировал и вставил последний запрос из моего ответа в Access 2010 и C# 2010 Express, и в каждом случае запрос работал нормально. –

+0

Он не будет работать в Access или VB.net. Я также копировал и вставлял запросы из вашего ответа в Access и получал ошибку. Я также проверял наличие опечаток и не нашел. Теперь я попытался поместить последний запрос в свою программу, и он дал мне ошибку «Механизм базы данных Microsoft Jet не может найти таблицу ввода или запрос' Qtr_Dates'. Убедитесь, что он существует и что его имя написано правильно ». Я проверил, и мои запросы помечены как 'Qtr_Dates' и' Stock_Price_with_qtr'. – gromit1

Смежные вопросы