我從一列價格像這樣計算出50日均線的查詢:我可以使用一個變量,而不是整數OVER子句
select Date,
price,
avg(price) over(order by Date, Date rows between 50 preceding and current row) as moving_avg
from t1
現在我想通過更換整50一個整數變量做一個循環測試不同的移動平均長度。
當我嘗試,我得到:
附近有語法錯誤@MA「
我從一列價格像這樣計算出50日均線的查詢:我可以使用一個變量,而不是整數OVER子句
select Date,
price,
avg(price) over(order by Date, Date rows between 50 preceding and current row) as moving_avg
from t1
現在我想通過更換整50一個整數變量做一個循環測試不同的移動平均長度。
當我嘗試,我得到:
附近有語法錯誤@MA「
我希望(選擇@MA)會的工作,但很可惜沒有運氣
也許你可以去動態
Declare @MA int = 50
Declare @SQL varchar(max) ='Select Date, price, avg(price) over(order by Date, Date rows between '+cast(@MA as varchar(25))+' preceding and current row) as moving_avg from t1 '
Exec(@SQL)
動態作品!謝謝 – Rich
@Rich樂於幫助。 –
遺憾的是沒有。如果您知道如何閱讀它們,那麼SQL文檔中包含的語法圖很全面。
當您仔細閱讀OVER
之後,您終於會發現PRECEDING
規範的變體是<unsigned_value_specification> PRECEDING
。
再低了下去:
<unsigned value specification> ::=
{ <unsigned integer literal> }
所以,不幸的是,你在這個時候唯一的選擇是使用字面 - 不是一個變量,而不是一個表達式。當允許變體(變量與文字,比如說)時,語法圖確實傾向於使這些變體顯式可見。
可比語法TOP
有:
[
TOP (expression) [PERCENT]
[ WITH TIES ]
]
這裏,你已經知道了,你可以在這裏使用任何表達。
謝謝你的解釋 – Rich
我不是答案,因爲我還沒有碰到某些這之前,但它似乎是這樣的[在SQL服務器中使用TOP的變量](http://stackoverflow.com/questions/1927450/use-variable-with-top-in-select-statement-in -SQL-服務器沒有制定-IT-dynami)。爲了做到這一點,你必須把這個變量放在禁忌之中。也許嘗試(@MA)之前和當前行之間的行,看看它是否讓人開心。 stab_in_the_dark> – JNevill
@JNevill好的想法,但我只是嘗試過'(50)和(@MA)',在這兩種情況下它肯定都不喜歡括號 – Rich
Shucks。聽起來像你必須去動態SQL然後。這總是一個派對pooper :( – JNevill