Я надеюсь, что смогу получить некоторую помощь, поскольку я все еще довольно новичок в программировании на SQL.
Следующий код работает, но занимает ок.21 минута на бег.Можно ли выполнить этот запрос быстрее с тем же результатом?
Таблица EOD содержит приблизительно 46 миллионов записей и шесть столбцов (типы данных следуют за именами):
Symbol varchar(15)
Date Date
Open Float
High Float
Low Float
Close Float
Volume varchar(15)
Символ будет отличаться в зависимости от моего анализаи, таким образом, не написал предложение where в CTE "SMA".
Спасибо и дайте мне знать, если я могу быть более ясным.Мудрый.
with SMA as
(
select
*,
-- column names: symbol, open, low, high, close, volume(varchar(15))
((lag ([close],10)over (order by symbol, date) --#varSMANUM must also change number for field 'WM'!
+lag ([close],9)over (order by symbol, date)
+lag ([close],8)over (order by symbol, date)
+lag ([close],7)over (order by symbol, date)
+lag ([close],6)over (order by symbol, date)
+lag ([close],5)over (order by symbol, date)
+lag ([close],4)over (order by symbol, date)
+lag ([close],3)over (order by symbol, date)
+lag ([close],2)over (order by symbol, date)
+lag ([close],1)over (order by symbol, date)
)/ 10) as test,
(cast(2 as float)/(10 --#varSMANUM must add lag statements above!!!!
+1)) as WM
from
qwid.dbo.eod
)
select
date,
[close],
test
from
SMA
where
symbol = 'aapl'
order by
date;